2016-12-09 1 views
0

Ich habe eine Liste von mehreren hundert URL-Weiterleitungen innerhalb einer Neuschreibmaske. Die meisten URLs enthalten Abfragezeichenfolgen, die mit einem bestimmten Eintrag in der Neuschreibe-Map übereinstimmen. Ich habe this question darüber gefunden, wie die Abfragezeichenfolge in die Neuschreibemappe übergeben wird. Ich habe das funktioniert gut, aber das Problem ist jetzt, dass die vorhandene Abfrage Zeichenfolge an das Ende der neu geschriebenen URL angefügt wird. Zum Beispiel:Nach dem Durchlaufen der Rewrite-Map den Abfragestring vom Ende der URL entfernen

Expected Rewrite: 
/subdir/dir.cfm?categoryID=123 -> https://example.com/subdir/endurl 

Actual Rewrite: 
https://example.com/subdir/endurl?categoryID=123 

Expected Rewrite 
/subdir/dir.cfm?videoID=3422424-131FDDFD-234 -> https://example.com/subdir/awesome/stuff 

Actual Rewrite: 
https://example.com/subdir/awesome/stuff?videoID=3422424-131FDDFD-234 

Dies ist die Rewrite-Regeln habe ich:

RewriteEngine on 

RewriteMap redirects dbm=sdbm:C:\Apache24\conf\redirects.sdbm 
RewriteCond ${redirects:$1} !="" 
RewriteRule ^(.*\.(cfm|cfml)) ${redirects:$1?%{QUERY_STRING}} [NC,R=301,L] 

Wie kann ich die Abfrage-String entfernen, um die URL nach dem Umschreiben angehängt?

EDIT

konnte ich tatsächlich bekommen diese Arbeit mit diesem:

RewriteMap redirects dbm=sdbm:C:\Apache24\conf\redirects.sdbm 
RewriteCond ${redirects:$1} !="" 
RewriteRule ^(.*\.(cfm|cfml)) ${redirects:$1?%{QUERY_STRING}} [NC,C] 
RewriteRule (.*) $1? [L,R=301] 

aber ich bin nicht sicher, ob jemand einen besseren Weg weiß, zu tun, was ich tue? Ich denke, dass dies brechen könnte, wenn ich jemals zu einer URL umleiten muss, die eine Abfragezeichenfolge zu einer anderen URL enthält, die eine Abfragezeichenfolge enthält.

Antwort

0

In Apache Version 2.4.0 und höher können Sie [QSD] Flag (Query String Discard) verwenden:

RewriteRule ^(.*\.(cfm|cfml)) ${redirects:$1?%{QUERY_STRING}} [QSD,NC] 

In Apache-Version 2.2 gibt es keine [QSD] Flag, aber wenn der Ersatz-URI enthält ein Abfrage-String, den vorhandenen Abfrage-String zu verwerfen, das Standardverhalten von RewriteRule ist, so nur durch ein ? auf Ihre Rewrite URI hinzufügen, werden Sie den gleichen Effekt:

RewriteRule ^(.*\.(cfm|cfml)) ${redirects:$1?%{QUERY_STRING}}? [NC] 

(Ihre neu hinzugefügte Rewrite-Regel tatsächlich nutzt Dies Funktion)

Verwandte Themen