【问题标题】:301 redirect non-www to www not always working301 将非 www 重定向到 www 并不总是有效
【发布时间】:2011-05-12 00:16:16
【问题描述】:

我已经阅读了大量的帖子和页面,试图弄清楚这一点。我大部分时间都在工作。我有一个 .htaccess 文件设置,我正在尝试将我网站中的任何页面从非 www 重定向 (301) 到 www 版本。

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

它似乎可以从基本 url 工作。但是,它不会重定向到子页面。

这行得通:

example.com -> www.example.com

这不起作用:

example.com/foo.html -> www.example.com/foo.html

任何帮助将不胜感激

【问题讨论】:

  • 嗯...相当令人困惑我在我的网站上使用了几乎相同的重写,它工作正常。您可以尝试添加 RewriteBase / 但我不认为它应该有所作为。
  • 确实很奇怪...您可以在这里尝试一个现场示例freetypes.com/foo.html 如果您删除“foo.html”,您会看到它开始工作。
  • 啊,我认为您的 htaccess 中必须有另一条规则将其搞砸了。例如,如果我转到freetypes.com/bar.html,它将正确转发到 www 和 404 页面。
  • 这个代码对我来说确实有效,只需稍作修改。在第 3 行,我必须将 ^(.*)$ 替换为 ^(.*)/$ 以避免在域后出现两个斜杠 //。 (使用 Django 1.5.4)

标签: mod-rewrite


【解决方案1】:

我认为您需要添加 \ 来转义域中的点(第 2 行)。

如:

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

...在这里看到:http://www.hostingdiscussion.com/promotion-marketing/26083-301-redirect-non-www-www-vice-versa-good-search-engine-optimization-technique.html

【讨论】:

    【解决方案2】:
    RewriteCond %{HTTP_HOST} !^www\. [NC]
    RewriteRule ^ http://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
    

    【讨论】:

      【解决方案3】:

      这是我在 prod 环境中适用的规则:

      # If domain name without "www", add them:
      RewriteCond %{HTTP_HOST} ^mydomainname\.(fr|com|net|org|eu) [NC]
      # without www => force redirection:
      RewriteRule (.*) http://www.mydomainname.%1$1 [QSA,R=301,L]
      

      【讨论】:

        猜你喜欢
        • 2018-05-01
        • 2017-05-03
        • 2018-10-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-04-09
        • 1970-01-01
        相关资源
        最近更新 更多