为了去除index.html
or 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/
- now the 服务器发送
301
将浏览器重定向到的标头http://www.mydomain.com/path/
这显然不是很聪明,因为一个可怜的用户在问http://mydomain.com/path/index.html
会被双重重定向,他会觉得页面速度太慢。此外,Googlebot 可能会停止跟踪双重重定向的链接原因(我不确定最后一个,我不想对此进行讨论,这只是另一个可能的问题。)
Thanks!
*可能对谁感兴趣:
-
NC
也用于重定向
大写文件,即INDEX.HTML
/
InDeX.HtM
-
NE
用来
为了避免双重 url 编码,我避免http://.../index.html?hello=ba%20be
被重定向到http://.../index.html?hello=ba%2520be
-
QSA
用于重定向
也查询,即http://.../index.html?hello=babe
to
http://.../?hello=babe
(不需要,因为阿努巴瓦答案)
为了避免双重重定向,.htaccess 文件中还有另一个满足这两个条件的规则,如下所示:
Options +FollowSymlinks -MultiViews
RewriteEngine on
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteCond %{REQUEST_URI} ^(.*/)index\.html$ [NC]
RewriteRule . http://www.%{HTTP_HOST}%1 [R=301,NE,L]
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule . http://www.%{HTTP_HOST}%{REQUEST_URI} [NE,R=301,L]
RewriteCond %{REQUEST_URI} ^(.*/)index\.html$ [NC]
RewriteRule . %1 [R=301,NE,L]
所以如果输入 URL 是http://mydomain.com/path/index.html
那么这里的第一个规则中的两个条件都得到满足,并且将有 1 个单个重定向 (301) 到http://www.mydomain.com/path/
.
我也相信QSA
上面并不真正需要标志,因为你是NOT操纵查询字符串。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)