【问题标题】:how to redirect www and non www to https for specific domain using htaccess如何使用 htaccess 将 www 和非 www 重定向到特定域的 https
【发布时间】:2016-09-03 17:24:20
【问题描述】:

我需要将 www 和非 www 重定向到 https。我在 stackoverflow 上到处找,但找不到我要找的东西。

规则是:

  • example.com 和 www.example.com 和 https://example.com 必须重定向到https://www.example.com
  • 必须与域和扩展名 example.com 匹配。它不能是通配符 匹配 abc.com 或 123.com 或 example.net 或其他任何内容
  • 必须仅匹配 www 子域。它不能是通配符 也匹配 sub.example.com 或 thisisademo.example.com

我目前有:

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

但是,如果有人进入 www.example.com,它仍然会转到 http 版本而不是 https。

我认为我在这里真正需要的是 RewriteCond 正则表达式来完全匹配并且仅匹配“example.com”和“www.example.com”

谢谢

【问题讨论】:

    标签: .htaccess redirect mod-rewrite https


    【解决方案1】:

    这是对我有用的唯一方法 - 使用 !on 代替 off 和使用 %{ENV:HTTPS} 代替 %{HTTPS}

      #non-www. http to www. https
      RewriteCond %{ENV:HTTPS} !on
      RewriteCond %{HTTP_HOST} ^(www\.)?yourdomain\.com$
      RewriteRule (.*) https://www.yourdomain.com/$1 [R=301,L]
    
      #non-www. https to www. https
      RewriteCond %{ENV:HTTPS} on
      RewriteCond %{HTTP_HOST} ^yourdomain\.com$
      RewriteRule (.*) https://www.yourdomain.com/$1 [R=301,L]
    

    【讨论】:

      【解决方案2】:

      您可以使用以下规则在一次重定向中将非 www 或 www 重定向到 https://www

      #redirect http non-www to https://www
      RewriteCond %{HTTPS} off
      RewriteCond %{HTTP_HOST} ^(www\.)?example\.com$
      RewriteRule (.*) https://www.example.com/$1 [R=301,L]
      #redirect https non-www to www
      RewriteCond %{HTTPS} on
      RewriteCond %{HTTP_HOST} ^example\.com$
      RewriteRule (.*) https://www.example.com/$1 [R=301,L]
      

      在测试此规则之前清除浏览器的缓存。

      【讨论】:

      • 不幸的是,这仍然会重定向不是“example.com”的域,还会重定向不是“www.”的子域。它应该只重定向 example.com 或 www.example.com。
      • @Nhiik : 我已经更新了规则,将 RewriteCond 中的 example.com 替换为 yourdomain.com 并替换 www.example。 comwww.yourdomain.com 在规则的目标
      • 谢谢,但还不够具体。它正在重定向到 https,但它的范围仍然太宽。如果我输入 test.example.com,它仍然会被重定向到 example.com。这不应该发生。此外,如果我将 example.net 或 testurl.com CNAME 到服务器,它仍然会被重定向到 example.com。这不应该发生。只有 www 子域和 example.com 的基域应该通过。
      【解决方案3】:
      #First rewrite any request to the wrong domain to use the correct one (i.e. www.)
      RewriteCond %{HTTP_HOST} !^www\.
      RewriteRule ^(.*)$ https://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
      
      #Now, rewrite to HTTPS:
      RewriteCond %{HTTPS} off
      RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
      

      【讨论】:

      • 不幸的是,这仍然会重定向不是“example.com”的域,还会重定向不是“www.”的子域。它应该只重定向 example.com 或 www.example.com。
      猜你喜欢
      • 2016-12-26
      • 1970-01-01
      • 1970-01-01
      • 2014-10-28
      • 1970-01-01
      • 1970-01-01
      • 2021-04-23
      • 2017-05-03
      • 2010-12-01
      相关资源
      最近更新 更多