2015-12-21 40 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]