2016-07-02 12 views
0

Ich arbeite an einem Projekt und ich bin mit einigen stecken .htaccess Rewrite-Regel, die nicht funktioniert & Ich versuchte viele Dinge, aber kein Glück, also bitte helfen Sie mir.Brauchen Sie Hilfe in Bezug auf .htaccess Rewrite-Regel für Query String URLs mit dynamischen Unterverzeichnis

Hier ist, was ich tue:

wenn ich öffnen: domain.com/us/search.html?keyword=xyz&location=alabama

sollte die Datei search.php aus Stammverzeichnis & Arbeit wie diese Zeilen lesen müssen: search.php?directory=us&keyword=xyz&location=alabama

es richtig Unterverzeichnis bekommen, aber keine Keywords und Standortdaten erhalten.

Hier ist mein .htaccess Code:

Options +FollowSymlinks 
RewriteEngine on 
RewriteCond %{HTTP_HOST} ^domain.com [NC] 
RewriteRule ^(.*)$ http://www.domain.com/$1 [L,R=301] 
RewriteRule ^(.*)/(.*)-ad(.*).html ad.php?countrycode=$1&title=$2&id=$3 [NC] 
RewriteRule ^(.*)/$ country.php?countrycode=$1 [NC] 
RewriteRule ^(.*)/(.*)-author\.html author.php?countrycode=$1&q=$2 [NC] 
RewriteRule ^(.*)/(.*)-author/currentpage=(.*) author.php?countrycode=$1&q=$2&currentpage=$3 [NC] 
RewriteRule ^(.*)/search\.html?keyword=(.*)&location=(.*) search.php?countrycode=$1&keyword=$2&location=$3 [NC,L] 
RewriteRule ^(.*)/search\.html$ search.php?countrycode=$1 [NC,L] 
RewriteRule ^(.*)/latest\.html$ latest.php?countrycode=$1 [NC,L] 
RewriteRule ^(.*)/submit\.html$ submit.php [NC,L] 
RewriteRule ^error\.html$ error.php [NC,L] 
ErrorDocument 400 /error.html 
ErrorDocument 401 /error.html 
ErrorDocument 403 /error.html 
ErrorDocument 404 /error.html 
ErrorDocument 500 /error.html 

Antwort

1

Die entsprechende Regel ist

RewriteRule ^(.*)/search\.html$ search.php?countrycode=$1 [NC,L] 

Normalerweise RewriteRule hält eine vorhandene Abfrage-String, wenn Sie selbst eine Beurteilung schreiben

Ändern der Abfrage-Zeichenfolge

standardmäßig die Query-String wird unverändert weitergegeben. Sie können jedoch URLs in der Substitutionszeichenfolge mit einem Abfragezeichenfolgeteil erstellen. Verwenden Sie einfach ein Fragezeichen in der Substitutionszeichenfolge, um anzugeben, dass der folgende Text in die Abfragezeichenfolge erneut eingefügt werden soll. Wenn Sie eine vorhandene Abfragezeichenfolge löschen möchten, beenden Sie die Ersatzzeichenfolge mit einem Fragezeichen. Verwenden Sie das [QSA] -Flag, um neue und alte Abfragezeichenfolgen zu kombinieren.

die vorherige Abfrage-String zu halten, müssen Sie die QSA|qsappend Flagge

RewriteRule ^(.*)/search\.html$ search.php?countrycode=$1 [NC,L,QSA] 

Dieses umschreibt search.html bedingungslos fügen.


Wenn Sie wollen, dass es nur neu zu schreiben, wenn die Anforderung enthält die Query-String-keyword=xyz&location=alabama, müssen Sie die Regel Präfix mit einem RewriteCond mit %{QUERY_STRING}

RewriteCond %{QUERY_STRING} keyword=.+?&location=. 
RewriteRule ^(.*)/search\.html$ search.php?countrycode=$1 [NC,L,QSA] 

P. S. Am Anfang schreiben Sie search.php?directory=us&..., aber in den Regeln haben Sie search.php?countrycode=.... Passen Sie die Regeln entsprechend an.

0

hier arbeitet .htaccess:

Options +FollowSymlinks 

RewriteEngine on 
RewriteCond %{HTTP_HOST} ^domain.com [NC] 

RewriteRule ^(.*)$ http://www.domain.com/$1 [L,R=301] 
RewriteRule ^(.*)/(.*)-ad(.*).html ad.php?countrycode=$1&title=$2&id=$3 [NC] 
RewriteRule ^(.*)/$ country.php?countrycode=$1 [NC] 
RewriteRule ^(.*)/(.*)-author\.html author.php?countrycode=$1&q=$2 [NC] 
RewriteRule ^(.*)/(.*)-author/currentpage=(.*) author.php?countrycode=$1&q=$2&currentpage=$3 [NC] 

RewriteCond %{QUERY_STRING} keyword=(.*)&location=(.*) 
RewriteRule ^(.*)/search\.html search.php?countrycode=$1&keyword=%1&location=%2 [NC,L] 

RewriteRule ^(.*)/search\.html$ search.php?countrycode=$1 [NC,L] 
RewriteRule ^(.*)/latest\.html$ latest.php?countrycode=$1 [NC,L] 
RewriteRule ^(.*)/submit\.html$ submit.php [NC,L] 
RewriteRule ^error\.html$ error.php [NC,L] 

ErrorDocument 400 /error.html 
ErrorDocument 401 /error.html 
ErrorDocument 403 /error.html 
ErrorDocument 404 /error.html 
ErrorDocument 500 /error.html 

RewriteRule Richtlinie ist die Anwendung nur auf die Anforderungspfad, dh nur auf die ? Zeichen. Alle nach dem ? Zeichen kann über RewriteCond und es %{QUERY_STRING} Variable überprüft werden. Hier ist, was Sie in den Protokollen von mod_rewrite für die geänderte RewriteRule + RewriteCond sehen:

[rewrite:trace3] applying pattern '^(.*)/search\\.html' to uri 'us/search.html' 
[rewrite:trace4] RewriteCond: input='keyword=xyz&location=alabama' pattern='keyword=(.*)&location=(.*)' => matched 
[rewrite:trace2] rewrite 'us/search.html' -> 'search.php?countrycode=us&keyword=xyz&location=alabama' 

Und für die Rückverweise auf dem angepassten RewriteCond Muster müssen Sie %N nicht $N verwenden.

+0

Dies und seine Arbeit jetzt hinzugefügt, Danke für die Hilfe. 'RewriteRule^(. *)/Suche \ .html $ search.php? Countrycode = $ 1 [NC, L, QSA]' –

+0

Warum akzeptierst du die richtige Antwort nicht? – spirit

+0

getan, akzeptierte ich die richtige Antwort –

Verwandte Themen