【问题标题】:How do I use RegEx to redirect non www to www with an exception for one SSL subdomain?如何使用 RegEx 将非 www 重定向到 www,但一个 SSL 子域除外?
【发布时间】:2015-09-22 04:45:54
【问题描述】:

我不是 RegEx 方面的专家,但我正在处理的网站上已经有以下 htaccess 规则:

RewriteEngine On
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}$1 [R=301,L]

如何保留此规则,但添加一个例外以阻止 secure.domain.com 重定向到 www.secure.domain.com 并在 secure.domain.com 域名上强制 SSL?

【问题讨论】:

    标签: regex apache .htaccess redirect ssl


    【解决方案1】:

    在上述规则集中添加一个额外的RewriteCond 指令,以排除secure 子域,与排除www 子域的方式相同。 RewriteCond 指令是隐式 AND'd:

    RewriteEngine On
    
    RewriteCond %{HTTP_HOST} !^www\.
    RewriteCond %{HTTP_HOST} !^secure\.
    RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]
    

    在每个目录的 .htaccess 文件中,您需要在替换中的 $1 之前添加一个斜杠。由于目录前缀已从捕获的模式中删除。如果这直接在您的服务器配置中,那么您将不需要它。

    以上条件可以合二为一,如果你愿意的话:

    RewriteCond %{HTTP_HOST} !^(www|secure)\. [NC]
    

    然后,要在 secure 子域上强制 SSL,添加以下内容:

    RewriteCond %{HTTPS} !=on
    RewriteCond %{HTTP_HOST} ^secure\.
    RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]
    

    【讨论】:

    • 按所有权利,这应该可以工作,并且在我设置的测试站点上工作。它只是在生产中不起作用,这让我认为正在发生其他事情。安全子域部分对我不起作用,尽管它确实为它分配了 HTTPS。
    • 您是说secure 子域没有被排除在第一个规则集中吗?但是第二个规则集成功地将secure 子域重定向到HTTPS?这听起来可能是一个缓存问题 - 您是否清除了您的浏览器(和任何中介)缓存? 301 重定向由浏览器缓存,因此如果您之前使用原始规则集访问过secure 子域,那么您将被重定向并且此重定向将被缓存。出于这个原因,通常最好使用 302(临时)重定向进行测试 - 不应缓存。
    • 发生了什么,它加载了secure.domain.com 地址半秒钟,然后重定向到domain.com。该站点也是一个托管在 Amazon AWS 上的 Wordpress 多站点,其中包含 elasticache、s3 和 OpsWorks,这使事情变得非常复杂。因此,尽管您的解决方案是正确的,但还有其他因素阻止它发挥作用。
    • 找出问题所在。这是一个没有子域的 wordpress 多站点,并且 wp-config.php 文件将子域重定向到主 www url,因为它在 wp-config 中禁用了子域支持。
    猜你喜欢
    • 2020-11-09
    • 2016-12-23
    • 2014-03-25
    • 2015-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多