【问题标题】:How to redirect www to non-www while keeping URL with .htaccess如何在使用 .htaccess 保留 URL 的同时将 www 重定向到非 www
【发布时间】:2014-09-22 11:50:10
【问题描述】:

我尝试将任何带有 www 的 URI 上的所有请求重定向到不带 www 的相同 URL。所以

我现在使用的规则是

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} ^www\.domain\.com$ [NC]
RewriteRule ^(.*)$ http://domain.com/$1 [L,R=301]
</IfModule>

但它似乎只适用于主域,而不适用于子页面。

同样重要的是:像 static.domain.com 这样的其他子域应该仍然可以工作。

感谢您的帮助!

【问题讨论】:

    标签: php apache .htaccess mod-rewrite redirect


    【解决方案1】:

    改用%{REQUEST_URI} 试试这个规则:

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

    【讨论】:

    • 无意将www 设为可选,因为问题是从www 重定向到non www
    • 那行不通。它只重定向主域。不是子页面。
    • 最后一条评论成功了。我上面还有其他重写规则。谢谢!
    • 在规则的 http 后添加 %{ENV:protossl}。如果没有,SSL 访问将不会被重定向。
    • 是的,如果https 是可能的,那么RewriteRule ^ http%{ENV:protossl}://%1%{REQUEST_URI} [L,R=301] 是个好主意。
    【解决方案2】:

    试试这个:

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

    【讨论】:

      猜你喜欢
      • 2011-09-25
      • 1970-01-01
      • 2010-11-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-30
      • 2010-12-13
      相关资源
      最近更新 更多