我绝对不是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?

最佳答案

向上述规则集中添加一个附加的RewriteCond指令,以排除secure子域,这与排除www子域的方式相同。 RewriteCond指令隐式与:

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]

08-25 14:57
查看更多