【问题标题】:htaccess redirect for non-www both http and httpshtaccess 重定向非 www http 和 https
【发布时间】:2011-01-02 04:15:19
【问题描述】:

我想要:

  • http://example.com 重定向到:http://www.example.com
  • https://example.com 重定向到:https://www.example.com

并且任何 http://whatever.example.com 都不要像 http://www.whatever.example.com 这样附加 www。

【问题讨论】:

    标签: http .htaccess redirect https


    【解决方案1】:

    试试这个规则:

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

    这里有一个解释:

    1. 第一个条件测试 HTTP 标头字段 Host 是否具有所需的格式(恰好包含一个句点)。
    2. 第二个条件测试 HTTPS 变量的值(值 onoff)和 s(所以是 onsoffs)的连接值等于ons 并捕获s。这意味着如果 %{HTTPS}s 计算结果为 ons,则第一个匹配组为 s,否则为空。
    3. 该规则将匹配所有请求,因为每个字符串都有一个开头(标有^),如果两个条件都为真,则将它们重定向到http%1://www.%{HTTP_HOST}%{REQUEST_URI} 的评估值。其中%1 是前一个条件的第一个匹配组(s 如果 HTTPS,否则为空),%{HTTP_HOST} 是请求的 HTTP Host%{REQUEST_URI} 是绝对 URL 路径这是请求的。

    【讨论】:

    • 你也能解释一下吗?这对我来说有点中文......第一行是为了只捕获两部分主机(如:example.com)。第二行是做什么的,如何做的?
    • 看起来不错,但正在为我生成 500 条内部错误消息。
    • 在某些主机上,您需要将第二行替换为 RewriteCond %{HTTP:X-Forwarded-SSL}s ^on(s)| 以进行正确的 SSL 检测。
    【解决方案2】:

    尝试将此RewriteCond 添加到您的 .htaccess 文件中以仅捕获 SSL - 然后对标准 http 执行相同的操作。

    RewriteCond %{HTTPS} on
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-11-12
      • 2013-07-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-20
      • 2015-02-16
      相关资源
      最近更新 更多