【问题标题】:How to redirect non-www to www URL's using htaccess?如何使用 htaccess 将非 www 重定向到 www URL?
【发布时间】:2010-11-12 12:53:28
【问题描述】:

我的网站根目录中有一个网站http://www.example.com/,我添加了.htaccess 文件以将http://example.com/ 的任何请求重定向到http://www.example.com/

最近我创建了一个新部分“视频”,所以视频的 URL 是 http://www.example.com/videos/ 。在这个视频文件夹中,我有另一个 htaccess 文件,它正在为视频条目执行重写。当我尝试访问 http://example.com/videos/ 时,它不会将我重定向到 http://www.example.com/videos/

我认为 .htacces 没有从父目录继承之前的规则。谁能告诉我我可以在 /videos/ 文件夹的 .htaccess 文件中添加什么规则,以便对 http://example.com/videos/ 的任何请求都将被重定向到 http://www.example.com/videos/ URL。

【问题讨论】:

    标签: apache .htaccess url-rewriting


    【解决方案1】:

    我建议每个人都坚持以下方法,它只会重定向主域,而不会重定向主机中的任何其他子目录或子域。

    # Redirect non-www to www only for main domain 
    # recommended if you have any/some sub-domain(s)
    RewriteEngine on
    RewriteBase /
    
    # Replace yoursite and .tld respectively
    RewriteCond %{HTTP_HOST} ^yoursite\.tld$
    # Replace yoursite.com
    RewriteRule ^(.*) http://www.yoursite.com/$1 [R=301]
    

    如果您真的确定,请使用此方法,我希望您永远不会在您的网站上使用子域,即 subdomain.yoursite.com 或其他。欢迎您使用以下方法。 “再说一遍,确定你是否真的要使用这种方法”

    # Redirect all non-www to www including subdomain(s)
    RewriteCond %{HTTP_HOST} !^www\. [NC]
    RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]
    

    以下方法会将所有 www url 重定向到非 www 包括您的子域,尽管您不能使用 www.subdirecty.yoursite.com 它会提示您 500 的错误。

    # Redirect www to non-www
    RewriteCond %{HTTP_HOST} ^www\.(.*) [NC]
    RewriteRule ^(.*)$ http://%1/$1 [R=301,L]
    

    【讨论】:

      【解决方案2】:

      这是使用 htaccess 将非 www 重定向到 www URL 的最佳解决方案。在 htaccess 文件中使用此代码并检查 url。

      Options +FollowSymlinks
      RewriteEngine on
      rewritecond %{http_host} ^mydomain.com [nc]
      rewriterule ^(.*)$ http://www.mydomain.com/$1 [r=301,nc]
      

      【讨论】:

        【解决方案3】:

        这是一个更通用的解决方案,因为它可以与任何域名一起使用,而无需在每个 .htaccess 中指定具体的域名:

        # Redirect non-www to www:
        RewriteCond %{HTTP_HOST} !^www\. [NC]
        RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]
        

        反之亦然(www到非www):

        # Redirect www to non-www
        RewriteCond %{HTTP_HOST} ^www\.(.*) [NC]
        RewriteRule ^(.*)$ http://%1/$1 [R=301,L]
        

        【讨论】:

        • 我在 Magento 中,这段代码将 //mywebsite.com/some/url 重定向到 //www.mywebsite.com/index.php。这里是否有额外的步骤来保持 URL 的持久性?
        • 我认为您必须从 $1 附近的规则中删除一个“/”:RewriteRule ^(.*)$ %{HTTP_HOST}$1 [R=301,L]
        【解决方案4】:

        我认为可能只是您现有的规则过于严格,因此没有在您的子目录中触发。像这样的东西应该适用于整个网站:

        RewriteEngine on
        RewriteBase /
        
        RewriteCond %{HTTP_HOST} ^example\.com$
        RewriteRule ^(.*) http://www.example.com/$1 [R=301]
        

        【讨论】:

        • 我应该把这条规则放在哪里,在父根目录的 .htaccess 中还是在视频文件夹的 .htaccess 中?
        • 它应该在根目录下工作。我的根 .htaccess 中有类似的东西,它适用于子目录。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-05-30
        • 1970-01-01
        • 2012-02-06
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多