旧网站有一个(302)重定向/到/index.shtml。
新网站将在/上显示。 出于搜索引擎优化的原因,我们希望从/index.shtml进行301重定向到/.
但是,如果我添加重定向htaccess文件,我们会陷入无限循环。所以某处仍然需要从/到index.shtml重定向,但在哪里?
旧网站安装在根目录/中。 新网站仍然在/ dev /(不是我的选择),但是htaccess确保当有人去/他们实际上在/ dev /中看到该网站时。 htaccess保存在/ dev /.
中旧的从/index.shtml重定向到/是什么?
htaccess中我的代码行会产生问题:
重定向301 /index.shtml http://www.example.com/
错误可能是由以下原因引起的:
IfModule mod_rewrite.c(带括号)
RewriteEngine On
RewriteBase /
RewriteRule ^ index.php $ - [L]
RewriteCond%{REQUEST_FILENAME}!-f
RewriteCond%{REQUEST_FILENAME}!-d
RewriteRule。 /index.php [L]
/ IfModule(带括号)
答案 0 :(得分:1)
您的重定向导致无限循环。它会将 /index.shtml 重定向到已指向 /index.shtml 的文档根目录。
<德尔> 要解决此问题或将** / index.shtml **设置为根目录处理程序,可以使用以下方法之一: 的DirectoryIndex DirectoryIndex index.shtml DirectoryIndex将在内部将您的** / **主目录转换为** / index.shtml **。 Mod-rewrite: RewriteEngine ^ $ /index.shtml [L] 这会将您的主目录重写为** / index.shtml **。 德尔>如果您想将 /index.shtml 重定向到 / ,可以使用以下规则:
RewriteEngine on
RewriteCond %{THE_REQUEST} /index\.shtml\s
RewriteRule ^index.shtml$ / [L,R]
这会将 /index.shtml 重定向到 / ,而不会导致无限循环。
答案 1 :(得分:0)
我知道我来晚了,但是问题是浏览器而不是网站。 301和302重定向都由最近的浏览器缓存,因此当您将它们更改为指向先前重定向的内容时,您会遇到循环。
您可以使用incognito mode
对其进行测试,您会发现重定向循环不再为您服务。这是因为incognito mode
不会缓存或观察缓存中自身会话之外的重定向。
不幸的是,无法确保以前的访问者不会陷入循环,这就是为什么您应该非常小心地使用301重定向的原因。 302重定向作为“临时”重定向,在重定向循环中会表现得更好,但是更好的解决方案是使用DirectoryIndex
来加载index.shtml作为默认文档而不是重定向到它(这最终导致了你的问题)。