【问题标题】:Redirect without www plus add trailing slash?不带 www 的重定向加上尾部斜杠?
【发布时间】:2016-10-19 15:42:52
【问题描述】:

我的 .htaccess 文件中有以下内容

RewriteEngine On
RewriteCond %{REQUEST_URI} ^www.mysite.com [NC]
RewriteCond %{REQUEST_URI} !\.[^./]+$
RewriteCond %{REQUEST_URI} !(.*)/$
RewriteRule ^(.*)$ mysite.com/$1/ [R=301,L] 

我试图让它重定向所有没有 www 的 URL,并始终在 URL 的末尾添加一个斜杠。

如果你在没有 www 的情况下直接点击它,这是有效的,但如果你用 www 尝试它会失败并且不会删除它,也不会添加尾部斜杠。

【问题讨论】:

    标签: apache .htaccess mod-rewrite


    【解决方案1】:

    这是删除www 并添加斜杠的单一规则:

    RewriteEngine On
    
    RewriteCond %{HTTP_HOST} ^www\. [NC,OR]
    RewriteCond %{REQUEST_URI} !/$
    RewriteCond %{HTTP_HOST} ^(?:www\.)?(.+)$ [NC]
    RewriteRule ^(.*?)/?$ http://%1/$1/ [R=301,L,NE]
    

    这也避免了在规则中硬编码您的域名。

    【讨论】:

      【解决方案2】:

      您可以始终使用这两条规则来强制执行。另外,您的第一个条件有语法错误。应该是HTTP_HOST 而不是REQUEST_URI

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

      【讨论】:

      • 谢谢,但是如果您使用 www 访问该站点,它仍会使用 www 加载它并且不会将其删除。
      • @CodingGuru 是否带有斜杠?
      • 末尾有斜线。
      猜你喜欢
      • 2017-09-28
      • 2011-07-08
      • 2016-10-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多