【问题标题】:.htaccess rule to force SSL on only certain domains.htaccess 规则仅在某些域上强制 SSL
【发布时间】:2017-10-08 08:25:12
【问题描述】:

我正在运行一个 WordPress 多站点网络,它允许用户有选择地在其网站上使用自定义域名。选择不使用自定义域的用户被分配了 WP 安装的子域(例如:fred.example.com,example.com 是安装 WP 多站点网络的 URL)。

我为主域配置了通配符 SSL,但没有可用于自定义域名的证书。

如果请求是针对 example.com*.example.com 的,我需要一个 htaccess 规则来强制流量到 https,但如果请求是使用自定义域传入的,则不需要。

它应该如下工作:

  • http://example.com/*https://example.com/*
  • http://foo.example.com/*https://foo.example.com/*
  • http://customdomain.com/*http://customdomain.com/*

【问题讨论】:

    标签: wordpress apache .htaccess ssl mod-rewrite


    【解决方案1】:

    在您的 .htaccess 文件顶部附近尝试以下类似操作。使用 mod_rewrite:

    RewriteEngine On
    RewriteCond %{HTTPS} !on
    RewriteCond %{HTTP_HOST} ^(?:[a-z0-9-]+\.)?example\.com
    RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [R=302,L]
    

    这就是说...对于所有不是 HTTPS 且匹配 example.com<subdomain>.example.com 的请求,然后重定向到同一主机上的 https://,相同的 URL 路径。

    请注意,这不允许www.<subdomain>.example.com(我假设您的 SSL 证书无论如何都不会涵盖)。

    仅当您确定它工作正常时,才将302(临时)更改为301(永久)。

    【讨论】:

    • 这会产生 500 内部服务器错误。可能是语法错误?
    • 抱歉,最后一个RewriteCond 应该是RewriteRule! (刚刚更新。)
    • 因此,这适用于主站点和子域的根目录,但对于站点中的文件夹/页面,它不会重定向。示例:http://example.com/2017/05/01/hello-world/ 不会重定向到 https
    • 嗯,应该的。此规则是否位于您的根 .htaccess 文件的顶部?没有对 URL 路径(文件夹/页面)的特定检查,因此 example.com/example.com/2017/05/01/hello-world/ 与此指令相同。此外,请确保您的浏览器缓存已清除,以防缓存任何更早的(错误的)301。
    • 就是这样......我把它放在了 WordPress 重写规则之下。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2012-07-11
    • 1970-01-01
    • 2015-07-14
    • 2015-02-25
    • 1970-01-01
    • 1970-01-01
    • 2015-05-07
    • 1970-01-01
    相关资源
    最近更新 更多