【问题标题】:Redirect all non www to www except one subdomain with htaccess将所有非 www 重定向到 www,除了一个带有 htaccess 的子域
【发布时间】:2016-09-19 08:45:28
【问题描述】:

我想将所有不包含www 的网址重定向到www

我用过这个:

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

现在我需要一个子域不要像这样被重定向,否则会出错。

所以我想将任何不以 sub 或 www 开头的 URL 重定向到 www.example.com

我该怎么做?谢谢

【问题讨论】:

    标签: .htaccess redirect


    【解决方案1】:

    您需要第二个RewriteCond。您可以申请任意数量的RewriteRule

    假设不是sub.mydomain.com 的任何东西都必须是www.mydomain.com,这是您的代码:

    RewriteCond %{HTTP_HOST} !^sub.mydomain.com$
    RewriteCond %{HTTP_HOST} !^www.mydomain.com$
    RewriteRule ^(.*) http://www.mydomain.com/$1 [QSA,L,R=301]
    

    但您可以使用正则表达式中的竖线 (|) 字符进一步简化:

    RewriteCond %{HTTP_HOST} !^(sub|www).mydomain.com$
    RewriteRule ^(.*) http://www.mydomain.com/$1 [QSA,L,R=301]
    

    【讨论】:

    • 谢谢你,但它告诉我发生了太多重定向并拒绝打开页面......也许这也是因为在此之前我正在为任何域别名进行其他重写主域?示例:www.do-main.com 转到 www.domain.com。这些是我明确写的……
    • 好的,我找到了。在您的规则中,我认为 % 应该在 { 之外
    • 已修复。对不起,我很累。
    • 嗨,斯科特,很好的答案 - 尽管在重写规则上,您需要在 $ 符号之前使用正斜杠,因为没有它会将 sub.example.com/folder 重定向到 www.example.comfolder
    • 已修复。感谢您接受!
    【解决方案2】:
    RewriteCond %{HTTP_HOST} !^(.*)\.(.*)\. [NC]
    RewriteCond %{HTTPS}s ^on(s)|
    RewriteRule ^ http%1://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
    

    这适用于所有域,不包括任何子域。玩得开心。

    【讨论】:

    • 国家代码顶级域名com.uk、com.jp呢?我不认为像 bbc.com.uk 这样的网站会很好。你能解决它吗?
    【解决方案3】:

    我尝试了 Scott S 的答案,但没有成功,所以我修改为使用我用于一般 301 的答案:

    RewriteCond %{HTTP_HOST} ^domain.com
    RewriteCond %{HTTP_HOST} !^subdomain.domain.com
    RewriteRule ^(.*)$ http://www.newdomain.com/$1 [R=301,L]
    

    它就像一个魅力

    【讨论】:

      猜你喜欢
      • 2014-07-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-28
      • 1970-01-01
      • 2015-11-06
      • 2017-06-20
      相关资源
      最近更新 更多