Apache mod重写规则总是给一个重定向循环



我通常很好编写apache重定向,但这个特定的客户端服务器一直给我问题:c

我试图将所有子页面重定向到主域,但我总是得到一个无限重定向循环。

这是我的。htaccess文件-我做错了什么?

RewriteEngine on
RewriteCond %{HTTP_HOST} ^example.com$ [OR]
RewriteCond %{HTTP_HOST} ^www.example.com$
RewriteRule ^test$ "http://example.com/" [R=301,L]
RewriteCond %{REQUEST_URI} !"^/$"
RewriteRule ^.*$ "http://example.com/" [R=301,L]

哇,重定向无穷大!但是如果我这样做:

RewriteRule ^test$ "http://example.com/" [R=301,L]

这将重定向http://example.com/test到http://example.com和砰,它工作!

任何指导将不胜感激。谢谢!

//编辑

问题是我们有一个邮件列表插件,它向用户发送确认电子邮件。单击确认电子邮件中的确认按钮后,用户将被重定向到我们的网站,并添加一个长查询字符串到http://example.com/。生成查询字符串,因此它永远不会是相同的。

下面是其中一个查询字符串的示例:

http://example.com/?has_media=false&fan=https%3A%2F%2Fapp.topspin.net%2Fapi%2Fv1%2Ffan%2Fshow%2F63451204%3Fartist_id%3D12053%26auth%3D96419cab29f59a342cde9ca3c0c20b58&campaign=https%3A%2F%2Fapp.topspin.net%2Fapi%2Fv1%2Fartist%2F12053%2Fcampaign%2F10151864

//编辑2

我尝试了@Jon Lin的例子,页面加载奇怪,但它确实加载。基本上,正确的域加载在某些浏览器中,但资产(CSS和图像不)和网络检查器显示这些路径作为永久移动也:s

尝试将最后一条规则更改为:

RewriteRule !^(?:index.(html?|php)|)$ http://example.com/ [R=301,L]

原因是在目录索引被映射之后(像index.php),规则再次被重新处理,因此额外的重定向。

注意查询字符串仍然将在末尾。这是因为没有办法匹配RewriteRule中的查询字符串。您需要匹配%{QUERY_STRING}变量。为了摆脱查询字符串,您需要在http://example.com/的末尾添加一个?

最新更新