【发布时间】:2011-08-28 22:20:00
【问题描述】:
为了从网址中删除index.html 或index.htm,我在.htaccess 中使用以下内容
RewriteCond %{REQUEST_URI} /index\.html?$ [NC]
RewriteRule ^(.*)index\.html?$ "/$1" [NC,R=301,NE,L]
这行得通!(有关此问题末尾的标志的更多信息 *)
然后为了在网址中添加www,我在.htaccess中使用以下内容
RewriteCond %{HTTP_HOST} !^www\.mydomain\.com$ [NC]
RewriteRule ^(.*)$ "http://www.mydomain.com/$1" [R=301,NE,L]
这也有效!
这里的问题是在以下情况下如何避免上述规则造成的双重重定向:
- 浏览器要求
http://mydomain.com/path/index.html -
服务器将
301标头发送到重定向浏览器到http://mydomain.com/path/ - 然后浏览器请求
http://mydomain.com/path/ - 现在服务器将
301标头发送到重定向浏览器到http://www.mydomain.com/path/
这显然不是很聪明,因为问http://mydomain.com/path/index.html 的可怜用户会被双重重定向,他会觉得页面太慢了。此外,Googlebot 可能会停止跟踪导致双重重定向的链接原因(我不确定最后一个,我不想对此进行讨论,这只是另一个可能的问题。)
谢谢!
*可能感兴趣的人:
-
NC也用于重定向 大写文件即INDEX.HTML/InDeX.HtM -
使用
NE为了避免双重网址编码,我避免http://.../index.html?hello=ba%20be被重定向到http://.../index.html?hello=ba%2520be -
(不需要感谢anubhava answer)QSA用于重定向 也查询,即http://.../index.html?hello=babe到http://.../?hello=babe
【问题讨论】:
-
Answer in near-duplicate。公平地说,另一个问题并没有要求每个规则都使用一个重定向,但无论如何答案都是正确的。
-
@Cori Xii:我在问我之前阅读了那个问题/答案,那里的规则和我的一样,但正如你所说,这个问题是关于如何避免双重重定向,另一个问题是不介意进行双重重定向。
-
另一个 question 不介意,但接受的 answer 无论如何都会满足您的要求,不是吗?
-
@Core Xii:我测试了你建议的答案stackoverflow.com/questions/5607001/…,它适用于那个问题,但它仍然执行双301重定向,所以它不能解决我的问题。
标签: regex apache .htaccess redirect mod-rewrite