使用mod_rewrite独立于http / https的域重定向

时间:2013-07-29 09:07:05

标签: .htaccess http redirect mod-rewrite https

我正在尝试使用mod_rewrite重定向我的域名,但我遇到了一些问题。

我想重定向以下请求:

mydomain.tld [redirect to] www.mydomain.tld
mydomain.tld/xxx.html [redirect to] www.mydomain.tld/xxx.html
mydomain.tld/categorie [redirect to] www.mydomain.tld/categorie

因此,域名前没有www的所有请求都必须重定向到www.mydomain.tld /...

我的特殊功能必须是 - 无论请求是http还是https:

https://mydomain.tld [redirect to] https://www.mydomain.tld
https://mydomain.tld/xxx.html [redirect to] https://www.mydomain.tld/xxx.html
https://mydomain.tld/categorie [redirect to] https://www.mydomain.tld/categorie

这是我已经尝试过的:

RewriteCond %{HTTP_HOST} ^mydomain.tld\.de$ [NC]
RewriteRule ^(.*)$ http://www.mydomain.tld/$1 [R=301,L]

但现在我不知道如何重定向https请求。 当你能帮助我时会很棒。 感谢

修改

以下解决方案对我来说很好,但是可以使它更容易或组合2个块的前2行吗?

RewriteCond %{HTTP_HOST} ^mydomain\.tld$ [NC]
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ http://www.mydomain.tld/$1 [R=301,L]

RewriteCond %{HTTP_HOST} ^mydomain\.tld$ [NC]
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteCond %{HTTPS} on
RewriteRule ^(.*)$ https://www.mydomain.tld/$1 [R=301,L]

4 个答案:

答案 0 :(得分:1)

在阅读mod_rewrite docs之后,我很想使用%{REQUEST_SCHEME},但这不可靠。

但我们可以像这样定义一个等价物:

# Prepare our REQUEST_SCHEME workaround, use with %{ENV:REQUEST_SCHEME}
RewriteCond %{HTTPS} off
RewriteRule .* - [E=REQUEST_SCHEME:http]
RewriteCond %{HTTPS} on
RewriteRule .* - [E=REQUEST_SCHEME:https]

# Redirect mydomain.tld to www.mydomain.tld preserving http[s] scheme
RewriteCond %{HTTP_HOST} ^mydomain\.tld$ [NC]
RewriteRule ^(.*)$ %{ENV:REQUEST_SCHEME}://www.mydomain.tld/$1 [R=301,L]

答案 1 :(得分:0)

试试这个:

RewriteCond %{HTTPS} ^on$
RewriteRule (.*) https://www.mydomain.com/$1 [R,L]

答案 2 :(得分:0)

增强针对CloudFlare用户的建议:

RewriteEngine on

RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTP:CF-Visitor} '"scheme":"http"'
RewriteRule .* - [E=REQUEST_SCHEME:http]

RewriteCond %{HTTPS} on [OR]
RewriteCond %{HTTP:CF-Visitor} '"scheme":"https"'
RewriteRule .* - [E=REQUEST_SCHEME:https]

答案 3 :(得分:0)

OK?

RewriteCond %{ENV:HTTPS} on
RewriteRule .* - [E=SSL:s]
RewriteCond %{HTTP_HOST} !^www\.(.*) [NC]
RewriteRule ^(.*)$ http%{ENV:SSL}://www.%{HTTP_HOST}/$1 [R=301,L]