子域名 SSL 重定向的正确规则

子域名 SSL 重定向的正确规则
RewriteCond %{HTTP_HOST} ^(.*\.)*subexample.example.com$ [NC]
RewriteCond %{SERVER_PORT} !^443$
RewriteRule ^(.*)$ https://subexample.example.com/$1 [R]   

我一直在使用这种方法。只要我转到特定页面,例如 subexample.example.com/orders.php,这种方法就有效。但是,如果您尝试转到子域的根目录,它会在末尾添加额外的“/example”。

对于一套可行的规则有什么建议吗?


非常感谢您的回复!

实际上,这就是我想做的事情:

http://support.mydomain.net >> https://support.mydomain.net

和(!)

http://support.mydomain.net/anypage* >> https://support.mydomain.net/anypage*

> RewriteCond %{HTTPS} off RewriteRule (.*)
> https://%{HTTP_HOST}%{REQUEST_URI}

可以,但我只需要为 support.mydomain.net 执行此操作

通过上述设置,如果您尝试访问 mydomain.net,您会收到证书警告,而我没有或不需要安装 SSL 证书。

更新!

我上面写的规则的另一个问题是,如果你尝试转到子域名的根目录(即 support.mydomain.net),它会转到https://support.mydomain.net/support

这让我抓狂了,救命!=)

任何帮助将不胜感激!

答案1

根据您的代码,我假设您想要执行以下重定向:

http://aaa.subexample.example.com -> https://subexample.example.com/aaa
http://subexample.example.com -> https://subexample.example.com/

而后者则不起作用。

我会用两个不同的 RewriteRule 片段来重写。

RewriteCond %{HTTP_HOST} ^subexample.example.com$ [NC]
RewriteCond %{SERVER_PORT} !^443$
RewriteRule ^(.*)$ https://subexample.example.com/$1 [L]

RewriteCond %{HTTP_HOST} ^(.+\.)+subexample.example.com$ [NC]
RewriteCond %{SERVER_PORT} !^443$
RewriteRule ^(.*)$ https://subexample.example.com/$1 [R]

相关内容