2010-12-09 11 views
0

Was für die folgende URL-Rewrite der .htaccess-Code ist:Apache Rewrite: dir/file.php foo = bar & name = val -> file.php newparam = dir & foo = bar & name = val

www.example.com/dir/file.php 

in?

www.example.com/file.php?newparam=dir 

und

www.example.com/dir/file.php?param1=val1&param2=val2 

in

www.example.com/file.php?newparam=dir&param=val1&param2=val2 

Vielen Dank im Voraus.

+0

@Keng mod_rewrite URL-Rewriting verwendet regexp, um vorhandenen URLs zu entsprechen. – Orbling

+0

Bitte verwenden Sie aussagekräftige Titel für eine Frage. Es gibt [Tonnen] (http://stackoverflow.com/questions/941010/apache-url-rewriting) von [Fragen] (http://stackoverflow.com/questions/285383/apache-mod-rewrite-htaccess) bezüglich zu [URL] (http://stackoverflow.com/questions/2920816/apache-mod-rewrite-question) [neu schreiben] (http://stackoverflow.com/questions/3430488/apache-url-rewrite-problem) in Apache, die meisten von ihnen mit nicht-beschreibenden Titeln. – Lekensteyn

Antwort

0

die folgenden Versuchen Sie, lassen Sie mich wissen, ob es funktioniert: nur

RewriteEngine on 
RewriteBase/

# Allow files that exist to bypass rewrites 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 

# Rewrite remaining files 
RewriteRule ^/([-a-zA-Z0-9_]+)/([-a-zA-Z0-9_]+\.php)$ /$2?newparam=$1 [L,QSA] 

Dies ermöglicht dir und file.php enthält alphanumerische Zeichen, Unterstrich und Bindestrich.

Die letzte Regel sucht nach einem URI, der zwei Pfadkomponenten zwischen den Schrägstrichen vergleicht. Die erste muss 1 oder mehr Zeichen in der gegebenen Menge [-a-zA-Z0-9_]+ sein, die zweite muss gleich sein, aber endet in .php. Die Zeichen ^ und $ entsprechen der Vorder- und Rückseite des URI. Der Ersatz sagt, dass die zweite Klammergruppe (der file.php Teil) an der Vorderseite und die erste geklammerte Gruppe (der dir Teil) als ein Parameter genannt newparam. Die [L,QSA] am Ende sagt, dass dies die letzte [L] Regel ist, wenn es übereinstimmt, also stoppe die Übereinstimmung weiter und führen die Umleitung und die [QSA] bedeutet "Query String Append", die die ursprüngliche Abfrage Zeichenfolge am Ende wieder hinzufügt, so dass würde weg Entfernen Sie die ursprüngliche Abfragezeichenfolge.

+0

Hmm, schön. Ich kann nie herausfinden, wie QSA funktioniert, aber das sieht vielversprechend aus. –

+1

QSA fügt der umgeschriebenen URL die aktuelle Abfragezeichenfolge hinzu. Ohne QSA wäre die ursprüngliche Abfragezeichenfolge verloren. – Lekensteyn

+0

@Lekensteyn Danke, hätte eigentlich erklären müssen, ich werde eine erklärende Notiz schreiben. – Orbling

Verwandte Themen