域名重定向独立于http/https与mod_rewrite

域名重定向独立于http/https与mod_rewrite

问题描述:

我试图用mod_rewrite重定向我的域,但我有一些问题。域名重定向独立于http/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] 

试试这个:

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

对不起,但那不是我想要的:/ – user2629551

阅读mod_rewrite的文档有人试图使用%{} 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] 

加强aexl的建议对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] 

好吗?

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