gpt4 book ai didi

regex - 从 url 中删除 'index.html' 并使用一个 301 重定向添加 'www'

转载 作者:行者123 更新时间:2023-12-02 08:28:10 25 4
gpt4 key购买 nike

为了从网址中删除 index.htmlindex.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]

这也有效!

这里的问题是在如下情况下如何避免上述规则创建的双重重定向:

  1. 浏览器请求http://mydomain.com/path/index.html
  2. 服务器发送 301 header 将浏览器重定向到 http://mydomain.com/path/
  3. 然后浏览器请求http://mydomain.com/path/
  4. 现在服务器发送301 header 将浏览器重定向到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=babehttp://.../?hello=babe (不需要 anubhava answer )

最佳答案

为了避免双重重定向,请在 .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 标志,因为您操作查询字符串。

关于regex - 从 url 中删除 'index.html' 并使用一个 301 重定向添加 'www',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6059920/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com