在htaccess RewriteCond中忽略无子域

时间:2011-06-13 09:41:16

标签: apache .htaccess

我已经设置了htaccess,将除www以外的所有子域重定向到https。但是我也希望它忽略http://domain.com - 目前它重定向到https://domain.com,这对我正在做的事情没有好处。

知道重写条件是什么吗?

我试过了:

RewriteCond %{HTTP_HOST} !^domain.com [NC]

RewriteCond %{HTTP_HOST} !^http://domain.com [NC]

但这些都不起作用。

这就是我现在正在使用的内容。

# Redirect subdomains to https
RewriteCond %{SERVER_PORT} =80
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteCond %{HTTP_HOST} !^domain.com [NC]
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

2 个答案:

答案 0 :(得分:2)

我认为你的问题是你需要逃避domain.com中的点,所以domain\.com

# Redirect subdomains to https
RewriteCond %{SERVER_PORT} =80
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteCond %{HTTP_HOST} !^domain\.com [NC]
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

您使用的是301(永久)而不是302,因此您可能在浏览器关闭之前甚至没有尝试向http域发送请求。你应该在测试时使用302并将301放在正确的位置。

答案 1 :(得分:1)

试试这个:

RewriteCond %{HTTPS} =off
RewriteCond %{HTTP_HOST} !^(www\.)?domain\.com [NC]
RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]