Apache 重定向无法与htaccess中的mod_rewrite一起使用
我需要重定向几个具有查询字符串的URI,如:Apache 重定向无法与htaccess中的mod_rewrite一起使用,apache,.htaccess,mod-rewrite,redirect,Apache,.htaccess,Mod Rewrite,Redirect,我需要重定向几个具有查询字符串的URI,如: /pages/foo.bar?pageId=123456至http://some.site/spam/egg/ /pages/foo.bar?pageId=45678至http://another.site/spaming/egging/ 我的htaccess中有以下内容: RewriteEngine On RewriteCond %{REQUEST_URI} ^/pages/foo.bar$ RewriteCond %{QUERY_STRING}
/pages/foo.bar?pageId=123456
至http://some.site/spam/egg/
/pages/foo.bar?pageId=45678
至http://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。我做错了什么?根据您的示例,您将被重定向到
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]
您需要移动这两条规则,即在行上的
重写引擎下方的所有其他规则之前,因为其他规则可能会覆盖这两条规则
(根据您的评论)您的罪魁祸首规则是:
RewriteRule . index.php [L]
这实际上是将每个请求重写为index.php
,并将request\u URI
变量的值更改为/index.php
,从而导致此条件失败:
RewriteCond %{REQUEST_URI} ^/pages/foo.bar$
@anubhava是的..我有很多Apache内部的“重定向301源目标”顶部的模式。@anubhava请注意,这些规则工作正常。@anubhava在顶部还有一个RewriteEngine
代码段。。所有这些都工作正常。。只有查询没有重定向。。正如我所说,将这两条规则移到RewriteEngine
行的所有其他规则之前。@anubhava非常感谢您很多…它的工作…这个块是罪魁祸首RewriteCond%{REQUEST\u FILENAME}-f[或]RewriteCond%{REQUEST\u FILENAME}-d RewriteRule^-[L]RewriteRule。index.php[L]
…您能解释一下吗?另外,请添加一个答案,以便我可以接受。。