【问题标题】:.htaccess Remove WWW from URL + Directories.htaccess 从 URL + 目录中删除 WWW
【发布时间】:2011-09-24 19:08:41
【问题描述】:

这对很多人来说似乎不是问题(阅读:我找不到答案),但我想更新以下 htaccess 代码,不仅从 URL 中删除“www”,而且访问的任何子目录。

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

这样,http://www.example.com/any/ 可以正常解析,但我希望它像根一样重定向到 http://example.com/any/

【问题讨论】:

    标签: .htaccess url mod-rewrite no-www


    【解决方案1】:

    我认为您已经接近了,但请尝试以下操作:

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

    不确定您对子目录的确切含义,但这遵循您的示例。

    【讨论】:

    【解决方案2】:

    我遇到了同样的问题(无法从指向附加域上的子目录的 URL 中删除“www”),但经过一些试验和错误后,这似乎对我有用:

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

    【讨论】:

    • 好的答案 - 这通常无需任何编辑即可正常工作...只需将其放入您的 .htaccess 文件中,您就可以了。
    • 这是目前从主机地址中删除 www 的最佳答案,因为您不需要对域名进行硬编码,因此您可以轻松地将更改推送到远程服务器,而无需修改 .htaccess 。谢谢你的回答。
    • 如果用户输入https://www.domain.com/log-me-in会怎样?他将被重定向到http。所以我需要再次从http 重写为https 对吗?
    • @TheFrost 是的,RewriteCond %{HTTPS} offRewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
    【解决方案3】:

    您好,该代码运行良好,除了它在带有一些值和斜线的 URL 中传递 www,它在 URL 中显示参数和值。

    RewriteEngine On SetOutputFilter DEFLATE AddOutputFilterByType DEFLATE text/html text/plain text/xml RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(!.(\.gif|\.jpg|\.png|\.swf|\.css|\.js|\.txt|\.php|\.htm|\.html)|.+[^/])$ /$1/ [R=301,NC] RewriteRule ^(.[^.*]+)\/$ ?jogar=$1 [NC] Options -Indexes Options +FollowSymLinks RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC] RewriteRule ^(.*)$ http:\/\/%1%{REQUEST_URI} [R=301,QSA,NC,L]

    【讨论】:

      【解决方案4】:

      我用过它,它对我有用

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

      示例:http://www.locphen.vn/he-thong-loc-nuoc-gieng.html -> http://locphen.vn/he-thong-loc-nuoc-gieng.html

      【讨论】:

        【解决方案5】:

        非 www => www 和相反 www => 非 www 的重定向代码。 .htaccess 文件中没有硬编码域和方案。所以源域和http/https版本会被保留。

        APACHE 2.4 及更新版本

        非万维网 => 万维网:

        RewriteEngine On
        RewriteCond %{HTTP_HOST} !^www\. [NC]
        RewriteRule ^ %{REQUEST_SCHEME}://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
        

        WWW => 非WWW:

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

        注意:不能在 %{REQUEST_SCHEME} 不可用的 Apache 2.2 上工作。为了与 Apache 2.2 兼容,请使用以下代码或将 %{REQUEST_SCHEME} 替换为固定的 http/https。


        APACHE 2.2 及更新版本

        非万维网 => 万维网:

        RewriteEngine On
        
        RewriteCond %{HTTPS} off
        RewriteCond %{HTTP_HOST} !^www\. [NC]
        RewriteRule ^ http://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
        
        RewriteCond %{HTTPS} on
        RewriteCond %{HTTP_HOST} !^www\. [NC]
        RewriteRule ^ https://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
        

        ...或更短的版本...

        RewriteEngine On
        RewriteCond %{HTTP_HOST} !^www\. [NC]
        RewriteCond %{HTTPS}s ^on(s)|offs
        RewriteRule ^ http%1://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
        

        WWW => 非WWW:

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

        ...不可能有更短的版本,因为 %N 仅在最后一个 RewriteCond 中可用...

        【讨论】:

        • +1 用于版本选项。问题:不应该使用 NE 标志吗? .. 如果您认为这只会在手动输入 url 时“命中”,那么没有它会很好,但是任何过时的“www.”又如何呢?链接“在野外”。我刚刚在一个古老的电子邮件模板中发现了一个这样的链接:P
        • @DM8 不,NE 标志 (noescape) 不应在这种情况下使用。 URL example.com/?a=1&b=2 正确重定向到例如www.example.com/?a=1&b=2。当您在 .htaccess 中的 URL 中有特殊字符以重定向到例如时,应使用该标志。 RewriteRule "^/anchor/(.+)" "/bigpage.html#$1" [NE,R](由于 NE 标志,# 在重定向时不会被转义)。
        • 很好的资源,@mikep。请注意,就我而言,我必须使用 %{ENV:HTTPS} 而不是 %{HTTPS}。
        • @typeoneerror 是的,这取决于具体情况,但是 apache-only 配置中的标准变量是 %{HTTPS} 但是当你使用像 SetEnvIf X-HTTPS on HTTPS=on 这样的自定义东西时(X-HTTPS 来自 apache 之前的代理,例如作为 nginx) 那么你必须使用提到的 %{ENV:HTTPS}
        【解决方案6】:

        我使用此代码。如果我的访问者的 url 中没有 www,那么这个条件会在 url 中添加 www,否则不需要在 url 中添加 www(因为他已经有了。:))

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

        【讨论】:

          猜你喜欢
          • 2016-10-01
          • 1970-01-01
          • 2012-03-19
          • 2012-06-25
          • 1970-01-01
          • 2013-05-28
          • 2019-06-19
          • 1970-01-01
          相关资源
          最近更新 更多