一个简单的 301 重定向会在我的 htaccess 中创建一个无限循环?

Posted

技术标签:

【中文标题】一个简单的 301 重定向会在我的 htaccess 中创建一个无限循环?【英文标题】:A simple 301 redirect creates an infinite loop in my htaccess? 【发布时间】:2016-08-27 09:59:33 【问题描述】:

我在我的网站example.com/foo.php 上有这个网址,我通过在我的 htaccess 中执行此操作将其更改为 example.com/foo

RewriteRule ^foo$ foo.php [NC,L]

而且效果很好。但是我想做一个从旧网址到新网址的 301 重定向。所以我在我的 htaccess 中添加了这一行:

RewriteRule ^foo.php$ http://example.com/foo [L,NC,R=301]

我得到一个无限循环的重定向......如何解决这个问题?

【问题讨论】:

【参考方案1】:

您可以使用 THE_REQUEST 变量避免循环错误:

RewriteCond %THE_REQUEST /foo\.php [NC]
RewriteRule ^foo\.php$ http://example.com/foo [L,R=301]
RewriteRule ^foo$ foo.php [NC,L]

或者如果你使用的是 apache 2.4,你可以使用 END 标志

RewriteRule ^foo\.php$ http://example.com/foo [L,R=301]
RewriteRule ^foo$ foo.php [NC,END]

【讨论】:

END 标签解决了我的问题,谢谢!愿意解释一下它的作用吗? END 标志立即结束重写过程。否则,如果没有 END,目标路径 foo.php 将再次匹配第一条规则的模式并创建无限的内部重定向。【参考方案2】:

如果您更改顺序,它不应该循环工作。试试下面的效果很好:

RewriteEngine on
RewriteRule ^foo.php$ http://example.com/foo [L,NC,R=301]
RewriteRule ^foo$ foo.php [NC,L]

【讨论】:

以上是关于一个简单的 301 重定向会在我的 htaccess 中创建一个无限循环?的主要内容,如果未能解决你的问题,请参考以下文章

301将index.html重定向到/或/index.php

.htaccess 结合 301 重定向和 URI 重写

如何执行从 index.htm 到 root 的简单 301 重定向?

将 301 从目录重定向到单个文件

301 在 Django 中重定向 www 子域

如何从 302 临时重定向代码更改为 301 永久重定向代码?