【问题标题】:mod_rewrite - add wwwmod_rewrite - 添加 www
【发布时间】:2011-09-21 00:10:13
【问题描述】:

我正在尝试使用 .htaccess 强制使用 www 作为我的网站地址:

RewriteCond %{HTTP_HOST} ^mysite\.com$ [NC]
RewriteRule ^(.*)$ http://www.mysite.coml/$1 [R=301,L]

如果我打开 mysite.com 这一切正常 - 它会添加 www。它变成http://www.mysite.com/index.php

但如果我打开mysite.com/subpage,我会再次重定向到http://www.mysite.com/index.php,而不是http://www.mysite.com/subpage

但是如果我打开 http://www.mysite.com/subpage 我不会得到重定向(这是预期的行为)。

我该如何解决这个问题?我希望将所有对我网站的请求重定向到 www 子域。

【问题讨论】:

    标签: apache .htaccess mod-rewrite


    【解决方案1】:

    来自极品HTML5 Boilerplate .htaccess

    <IfModule mod_rewrite.c>
      RewriteCond %{HTTPS} !=on
      RewriteCond %{HTTP_HOST} !^www\..+$ [NC]
      RewriteRule ^ http://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
    </IfModule>
    

    【讨论】:

      【解决方案2】:

      问题就在这里:

      RewriteCond %{HTTP_HOST} ^mysite\.com$ [NC]
      

      ^ 指定字符串的开头,而$ 指定结尾。

      为了使其正常工作,您需要在 .com 或 .+ 之后选择通配符。

      重申亚历克斯所说的:

       <IfModule mod_rewrite.c>
         RewriteCond %{HTTPS} !=on
         RewriteCond %{HTTP_HOST} !^www\..+$ [NC]
         RewriteRule ^ http://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
       </IfModule>
      

      【讨论】:

        【解决方案3】:

        实际上,我不得不不同意 Szanto 先生的观点。

        看来问题不在于:

        RewriteCond %{HTTP_HOST} ^mysite\.com$ [NC]
        

        通过一些额外的研究(通过 Google),我发现这对我很有用:

        <IfModule mod_rewrite.c>
          RewriteCond %{HTTPS} !=on
          RewriteCond %{HTTP_HOST} ^mysite\.com$ [NC]
          RewriteRule ^ http://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
        </IfModule>
        

        先生。 Szanto 的答案虽然格式正确,但似乎将所有缺少“www”的请求重定向到附加“www”的重定向。对于大多数子域来说,这不是一个理想的结果。上述代码仅在 TL 域名前没有“www”且没有子域的情况下才会重定向。

        希望这对其他人有所帮助。

        【讨论】:

        • 我最喜欢上面的回答——任何使用子域的人都必须更加具体,不要不必要地(和错误地)附加 www。
        猜你喜欢
        • 2011-11-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-08-25
        • 1970-01-01
        • 1970-01-01
        • 2015-02-06
        • 1970-01-01
        相关资源
        最近更新 更多