![](/img/trans.png)
[英]Redirect index.html to root htaccess and non www to www?
[英]Removing 'index.html' from url and adding 'www' with one single 301 redirect
为了从网址中删除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
用于避免双 url 编码我避免将http://.../index.html?hello=ba%20be
重定向到http://.../index.html?hello=ba%2520be
QSA
也用于重定向查询,即
http://.../index.html?hello=babe
到
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
标志,因为您没有操纵查询字符串。
更好的解决方案是将 index.html 规则放在 www 规则之前,并在 index.html 规则中将 www 前缀添加到目标 URL。 这样,查找http://domain.com/index.html 的人会被 FIRST 规则发送到http://www.domain.com/ 。 第二个 (www) 规则仅在缺少索引和 www 时才适用,这也只是一个重定向。
从先前的规则中删除L
标志? L
强制规则解析停止(当规则匹配时),从而发送第一个重写的 URL,而不应用第二个规则。
规则从上到下依次应用,如果 URL 与规则的条件和模式匹配,则每个规则都会再次重写 URL。
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^ http://www.%{HTTP_HOST}%{REQUEST_URI} [R=301]
RewriteRule ^(.*/)index\.html?$ $1 [NC,QSA,R=301,NE,L]
因此上面将首先添加www
然后删除index.html?
, 在发送新 URL 之前; 所有规则的单一重定向。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.