【问题标题】:Redirect loop due to htaccess file由于 htaccess 文件导致的重定向循环
【发布时间】:2015-03-23 05:33:02
【问题描述】:

我遇到的问题是第一个 URL 有效,而第二个无效。

http://www.example.com/podcasts
http://www.example.com/podcast

它们都是 HTML 文件,因此将 .html 添加到第二个文件即可。只有当 html 扩展被剥离(这是我想要发生的)时才会出现重定向问题。

我认为问题在于“播客”既是文件夹又是 html 文件。换句话说,有一个名为“podcast”的文件夹,还有一个名为 podcast.html 的文件,其扩展名被自动剥离(这是我的意图)。

那么我该如何解决这个重定向问题呢?我希望文件夹和 html 仍然具有相同的名称,并且 html 扩展名被剥离,就像现在一样。

这是我的 .htaccess 文件的副本(编辑:添加 L 标志)

RewriteEngine On 
RewriteBase / 

#removing trailing slash 

RewriteRule ^(.*)/$ $1 [R=301,L] 

#non www to www 

RewriteCond %{HTTP_HOST} !^www\. 
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L] 

#shtml 

AddType text/html .html 
AddHandler server-parsed .html 

#html 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^([^\.]+)$ $1.html [NC,L] 

#index redirect 

RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.html\ HTTP/ 
RewriteRule ^index\.html$ http://example.com/ [R=301,L]

非常确定与 %{REQUEST_FILENAME} !-f 相关的 RewriteRule 导致了问题。 404 错误不会发生循环。

想法?

【问题讨论】:

  • 您提供的两个网址几乎相同,只是第一个网址末尾多了一个“s”。是不是打错字了?
  • 输入 URL 是什么,您被重定向到的 URL 是什么? (参见 Chrome / Firebug 中的网络检查器)
  • @holodoc 不,这不是错字。这个想法是“播客”既是一个文件夹又是一个 html 文件,所以它不起作用,而“播客”只是一个 html 文件,因此它没有重定向问题。
  • 另外,添加L 标志和R 标志;使用空的浏览器缓存进行测试。这应该会消除一些潜在问题(并且会引入更多问题)。
  • @SalmanA 添加 L 标志没有帮助。嗯。

标签: apache .htaccess mod-rewrite url-rewriting


【解决方案1】:

试着把它放在你的 HTML 部分。

RewriteCond %{REQUEST_FILENAME} !-d

您的-f 标志将阻止文件在规则中被考虑,但这将排除目录。

【讨论】:

  • 将该 RewriteCond 添加到您的斜杠部分。这可能会干扰,因为服务器会尝试将目录名称转换为目录路径(这意味着它会添加尾部斜杠,然后删除它,然后添加它,然后再次删除它)。
  • 成功了。谢谢你的帮助。除了......它没有显示 podcast.html 页面,它显示了文件夹的原始索引......
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-12
  • 2019-09-16
  • 2014-03-23
  • 1970-01-01
  • 2019-04-01
  • 2014-09-11
相关资源
最近更新 更多