您可以捕获域并在 RewriteRule 中使用它。HTTP_REQUEST 在替换部分不可用,而仅在 RewriteCond 指令中可用。
我不确定,但您可以尝试将其拆分为两个.htaccess
文件。这个进入主目录
RewriteEngine On
# remove www. from HTTPS requests
RewriteCond %{HTTPS} on
RewriteCond %{HTTP_HOST} ^www\.(primary\.mobi)$ [NC]
RewriteRule .* https://%1/$0 [R,L]
# redirect HTTP requests to HTTPS
RewriteCond %{HTTPS} off
RewriteCond %{HTTP_HOST} ^(?:www\.)?(primary\.mobi)$ [NC]
RewriteRule .* https://%1/$0 [R,L]
这是.htaccess
子域文件夹中的
RewriteEngine On
# remove www. from HTTP requests
RewriteCond %{HTTP_HOST} ^www\.(subdomain\.com)$ [NC]
RewriteRule .* http://%1/$0 [R,L]
# redirect HTTPS requests to HTTP
RewriteCond %{HTTPS} on
RewriteCond %{HTTP_HOST} ^(?:www\.)?(subdomain\.com)$ [NC]
RewriteRule .* http://%1/$0 [R,L]
在没有301 的情况下测试您的规则,因为浏览器会缓存 301 结果并使测试变得更加困难。R=301
在您对规则满意之前不要添加。
在规范主机名中描述了一些替代方案,尤其是第一个,使用虚拟主机,看起来很有希望
<VirtualHost *:80>
ServerName www.primary.mobi
Redirect / https://primary.mobi/
</VirtualHost>
<VirtualHost *:80>
ServerName primary.mobi
</VirtualHost>
<VirtualHost *:80>
ServerName www.subdomain.com
Redirect / http://subdomain.com/
</VirtualHost>
<VirtualHost *:80>
ServerName subdomain.com
</VirtualHost>
我不知道这对你是否可行,但你可以试试。