2016-12-09 58 views
0

我有一個重寫映射內部數百個URL重定向/重寫的列表。大多數URL包含匹配重寫映射中特定條目的查詢字符串。我發現this question關於如何將查詢字符串傳遞到重寫映射。我得到這個工作正常,但現在的問題是,現有的查詢字符串被追加到重寫的URL的末尾。例如:通過重寫映射後,從URL末尾刪除查詢字符串

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 

這是重寫規則,我有:

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] 

如何刪除重寫後追加到URL查詢字符串?

編輯

我能真正得到這個工作使用此:

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] 

但是我不知道,如果有人有更好的方式來完成我在做什麼都知道?我想這可能會中斷,如果我不得不重定向到包含查詢字符串的URL到另一個包含查詢字符串的url。

回答

0

在Apache的版本2.4.0或更高版本,可以使用[QSD]標誌(查詢字符串丟棄):

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

在Apache的版本2.2,沒有[QSD]標誌,但如果更換URI包含查詢字符串的RewriteRule的默認行爲是放棄現有的查詢字符串,因此只需添加一個?你重寫URI,你會得到同樣的效果:

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

(新添加的重寫規則實際上使用這個功能)