.htaccess将所有tld重定向到另一个并强制https

时间:2015-09-02 09:09:13

标签: apache .htaccess redirect https url-redirection

您好我尝试将我的所有顶级域名重定向到另一个域名,这已经有效但我也想强制使用https。使用以下代码,它适用于所有顶级域名,例如“.de”,“。net”等。

RewriteEngine On
RewriteCond %{HTTP_HOST} !^(www\.)?domain\.com$ [NC]
RewriteRule ^(.*) https://domain.com/$1 [R=301,NE,L]

我的问题是我也想强制https为我的主tld => '.com' 之间

嗯,我们在这里:

RewriteEngine On
RewriteCond (http://) !^(www\.)?domain\.com$ [NC]
RewriteRule ^(.*) https://domain.com/$1 [R=301,NE,L]

对于我的坏,这是行不通的。我收到了“太多重定向”错误。我现在的问题是它是代码/重定向还是我的提供商的服务器配置可能还有其他错误?我注意到“Too many redirects”错误以任何方式我直到现在尝试从“http://”重定向到“https://”并尝试了很多不同的方式......

1 个答案:

答案 0 :(得分:3)

尝试:

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

添加“或”条件,以便在没有HTTPS时重定向,或者如果域不同则重定向。

(http://)不是变量,它是文字“http://”,显然永远不会匹配^(www\.)?domain\.com$,这就是为什么这个条件总是正确的。

由于你正在使用cloudflare,它在内部路由请求(不是HTTPS),你不能使用%{HTTPS}变量,你需要查看转发协议:

RewriteEngine On
RewriteCond %{HTTP:X-Forwarded-Proto} !https [OR]
RewriteCond %{HTTP_HOST} !^(www\.)?domain\.com$ [NC]
RewriteRule ^(.*) https://domain.com/$1 [R=301,NE,L]