【问题标题】:How to configure a canonical hostname and force https with apache?如何配置规范主机名并使用 apache 强制 https?
【发布时间】:2014-08-19 01:40:22
【问题描述】:

我想始终使用 https 并拥有一个规范域。问题是当我与辅助域建立 https 连接时,一切都会崩溃,因为证书是用于主域的。有没有办法解决这个问题,还是我必须为我的所有域购买证书,而不仅仅是规范域?

我的“/etc/apache2/apache2.conf”的相关部分

# Canonical hostname and always use https
<IfModule mod_rewrite.c>
  RewriteEngine On

  # force https on primary host (works fine)
  # http://primary-host.com -> https://primary-host.com
  RewriteCond %{HTTPS} off
  RewriteCond %{HTTP_HOST} ^primary-host\.com$
  RewriteRule (.*) https://primary-host.com%{REQUEST_URI}

  # force https and redirect to primary host (works fine)
  # http://secondary-host.com -> https://primary-host.com
  RewriteCond %{HTTPS} off
  RewriteCond %{HTTP_HOST} ^secondary-host\.com$
  RewriteRule (.*) https://primary-host.com%{REQUEST_URI}

  # FAIL: Certificate doesn't match and "Bad Request (400)" if accepted!
  # https://secondary-host.com -> https://primary-host.com
  RewriteCond %{HTTPS} on
  RewriteCond %{HTTP_HOST} ^secondary-host\.com$
  RewriteRule (.*) https://primary-host.com%{REQUEST_URI}

</IfModule>

【问题讨论】:

    标签: apache https rewrite


    【解决方案1】:

    您是否尝试过此处所述的以下操作? https://httpd.apache.org/docs/2.4/rewrite/remapping.html

    此规则的目标是强制使用特定主机名,而不是可能用于访问同一站点的其他主机名。例如,如果您希望强制使用 www.example.com 而不是 example.com,则可以使用以下配方的变体。

    解决方案: 解决此问题的最佳方法根本不涉及 mod_rewrite,而是使用放置在虚拟主机中的 Redirect 指令用于非规范主机名。

    <VirtualHost *:80>
      ServerName undesired.example.com
      ServerAlias example.com notthis.example.com
    
       Redirect "/" "http://www.example.com/"
    </VirtualHost>
    
    <VirtualHost *:80>
      ServerName www.example.com
    </VirtualHost>
    

    简而言之或

    <If "%{HTTP_HOST} != 'www.example.com'">
        Redirect "/" "http://www.example.com/"
    </If>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-09-22
      • 1970-01-01
      • 2023-04-06
      • 1970-01-01
      • 1970-01-01
      • 2016-09-03
      • 2018-07-18
      • 1970-01-01
      相关资源
      最近更新 更多