难以找到组合以满足以下3个条件。什么重写规则和条件将完成条件? (我已经对不起作用的规则感到惊讶。)
htaccess的:
RewriteEngine On
RewriteBase /
RewriteCond %{HTTPS} off
RewriteCond %{HTTP_HOST} ^www\.primary\.mobi [NC,OR]
RewriteCond %{HTTP_HOST} ^primary\.mobi [NC,OR]
RewriteCond %{HTTP_HOST} !^(www\.)?subdomain\.com [NC]
RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
以上内容不会剥离www并将www.subdomain发送到https。
欢迎解释。试图理解apache mod_rewrite手册页并尝试了几种方法但没有成功。
答案 0 :(得分:0)
您可以捕获域并在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
。
在Canonical Hostnames中描述了一些替代方案,尤其是第一个使用虚拟主机的方案,看起来很有希望
<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>
我不知道,如果这对你来说是可行的,你可以试试。