htaccess消除www然后将所有非子域流量重定向到https

时间:2014-04-10 16:40:44

标签: regex apache .htaccess mod-rewrite

我已经尝试了10种不同的配置,这些都在这里找到了答案,但我最终得到的只是一个重定向循环。

我最近的尝试如下:

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

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

前两行我消除了www

然后检查没有子域名,如果已经设置了https,那么我将重定向。

最后,我要检查现有文件等,并通过index.php发送所有流量

RewriteCond %{REQUEST_FILENAME}  !-l
RewriteCond %{REQUEST_FILENAME}  !-d
RewriteCond %{REQUEST_FILENAME}  !-f
RewriteRule .* index.php?%{QUERY_STRING} [L]

有人能发现明显的错误吗?

1 个答案:

答案 0 :(得分:0)

此规则将忽略http->https重定向的子域:

RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTP_HOST} ^www\.test\.com$
RewriteRule ^ https://test.com%{REQUEST_URI} [NE,R=301,L]

PS:这也将取代您的第一个www删除规则。