【问题标题】:Redirect all requests to HTTPS AND www to non-www将所有对 HTTPS 和 www 的请求重定向到非 www
【发布时间】:2015-09-30 21:39:24
【问题描述】:

我正在为三个不同域名提供服务的服务器上修复我的 Apache (2.4.12) 配置文件。我对每个站点都有不同的配置文件。我一生都无法弄清楚如何完成以下两项:

  1. 将所有 http 请求重定向到 https,保持请求的其余部分(子域/主机和文档路径)完全相同
  2. 将所有www 请求重定向到非www

我已经读过,如果我只有一个 *:80 VirtualHost 并将重写规则放在那里,这可以一步完成(我的其余子域都是 *:443 VirtualHosts,www 除外) ,但我不知道该怎么做。这些关于 SO 的答案不起作用:

  • this question 中接受的答案不正确(仅https 重定向)
  • This answer 对我不起作用——只有 https 重定向起作用。
  • This question 不处理通配符子域,因此不适用。
  • This question 也不适用,因为它不处理子域。

编辑:这是我在下面的 mike.k's answer 的 cmets 中引用的代码。

<VirtualHost *:80>
    RewriteEngine On
    RewriteCond %{HTTP_HOST} www.example.com
    RewriteRule ^(.*)$ https://example.com/$1 [R=permanent,L]

    RewriteCond %{HTTPS} off
    RewriteRule (.*) https://example.com%{REQUEST_URI}
</VirtualHost>

【问题讨论】:

    标签: apache mod-rewrite redirect


    【解决方案1】:

    这是来自我的生产系统并且有效。

    THE_HOSTNAME 是例如server,然后THE_FQHN 是server.domain.edu,如果您不想支持通配符和多个域名,这有助于 SSL 证书。

    # redirect to FQHN
    RewriteEngine on
    RewriteCond %{HTTP_HOST} THE_HOSTNAME$
    RewriteRule ^(.*)$ https://THE_FQHN/ $1 [R=permanent,L]
    
    # redirect to HTTPS
    RewriteCond %{HTTPS} off
    RewriteRule (.*) https://THE_FQHN%{REQUEST_URI}
    

    在您的情况下,www.domain.com 将是 THE_HOSTNAME 所在的位置,THE_FQHN 将是 domain.com,只是翻转

    【讨论】:

    • 您的代码第 4 行上的 $1 之前似乎不应有空格(我收到语法错误)。不过,我现在正在测试,如果删除了该空间,我会通知您。
    • 不幸的是,它不起作用。我完全按照您的说法使用了您的代码($1 根据我之前的评论固定),但使用了我的主机名信息。 https 重定向工作正常,但 www 没有被删除。我正在将确切的设置添加到 OP,以便您查看。
    • 您对空间的看法是对的,我用粗心的打字介绍了它。在编辑中将$ 放在www.example.com 的末尾,所以RewriteCond %{HTTP_HOST} www.example.com$
    猜你喜欢
    • 2015-04-20
    • 2015-02-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-08
    • 2014-02-13
    相关资源
    最近更新 更多