2015-12-21 62 views
2

我需要重定向數的URI有查詢字符串,如:重定向不與mod_rewrite的工作htaccess的

/pages/foo.bar?pageId=123456http://some.site/spam/egg/

/pages/foo.bar?pageId=45678http://another.site/spaming/egging/

我有這個在我的htaccess:

RewriteEngine On 

RewriteCond %{REQUEST_URI} ^/pages/foo.bar$ 
RewriteCond %{QUERY_STRING} ^pageId=123456$ 
RewriteRule ^.*$ http://some.site/spam/egg/ [R=301,L] 

RewriteCond %{REQUEST_URI} ^/pages/foo.bar$ 
RewriteCond %{QUERY_STRING} ^pageId=45678$ 
RewriteRule ^.*$ http://another.site/spaming/egging/ [R=301,L] 

但它不工作,顯示404.我做錯了什麼?

+0

@anubhava yes..i在頂部有許多Apache內部的「重定向301源dest」模式.. – utlamn

+0

@anubhava注意那些規則正常工作....我也有一個'RewriteEngine'片段Ť op..all這些工作正常..只是查詢不重定向.. – utlamn

+0

正如我所說的移動這些2條規則之前的所有其他規則下面的'RewriteEngine On'行。 – anubhava

回答

1

你需要的所有其他規則之前移動略低於RewriteEngine On線這條規則,即作爲其他規則可能會重寫此。

(您的意見基於)您的罪魁禍首規則是這樣的規則:

RewriteRule . index.php [L] 

這實際上是重寫每個請求index.php和改變REQUEST_URI變量的值/index.php從而導致這種情況下失敗:

RewriteCond %{REQUEST_URI} ^/pages/foo.bar$ 
1

從你的榜樣,您重定向到

http://some.site/spam/egg/?pageId=123456 
http://another.site/spaming/egging/?pageId=45678 

您可以使用瀏覽器的開發者工具看重定向(在網絡選項卡)。

也許重定向的URL中的查詢字符串會導致404?您可以在重定向的末尾添加?清除查詢字符串:

RewriteCond %{REQUEST_URI} ^/pages/foo.bar$ 
RewriteCond %{QUERY_STRING} ^pageId=45678$ 
RewriteRule ^.*$ http://another.site/spaming/egging/? [R=301,L]