0

我正在尝试使用 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

4 回答 4

1

阅读 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]
于 2014-06-03T19:19:54.667 回答
0

尝试这个:

RewriteCond %{HTTPS} ^on$
RewriteRule (.*) https://www.mydomain.com/$1 [R,L]
于 2013-07-29T13:33:24.103 回答
0

加强 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]
于 2017-01-25T15:45:30.593 回答
0

好?

RewriteCond %{ENV:HTTPS} on
RewriteRule .* - [E=SSL:s]
RewriteCond %{HTTP_HOST} !^www\.(.*) [NC]
RewriteRule ^(.*)$ http%{ENV:SSL}://www.%{HTTP_HOST}/$1 [R=301,L]
于 2017-07-14T13:09:48.667 回答