![使用 mod_rewrite 强制 SSL](https://linux22.com/image/597962/%E4%BD%BF%E7%94%A8%20mod_rewrite%20%E5%BC%BA%E5%88%B6%20SSL.png)
我有以下语句,它完美地重定向 :80 上对“www”的所有请求,以强制浏览器到 :443 上的相同位置
RewriteEngine on
RewriteCond %{HTTPS} !=on
RewriteRule ^/(.*)$ https://www.mydomain.com/$1 [R=301,L]
但是,我想要做的是,无论 https:// 和 .mydomain.com 之间是什么 - 在本例中是 www,但它可以是任何内容,如“www2”或“dev”等 - 我都希望将 URL 简单地转换为它的 SSL 等效项。
我是 mod_rewrite 的新手,考虑到子域名可以是任意可变长度的字符,我想要做的事情是否可行?
在此先感谢您的帮助。
答案1
尝试:
RewriteEngine on
RewriteCond %{HTTPS} !=on
RewriteRule ^/*(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]
答案2
通过使用 Apache mod_rewrite 提供的环境变量:
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
看http://httpd.apache.org/docs/2.2/mod/mod_rewrite.html#rewritecond 了解更多信息。
答案3
HTTP_HOST
您可以在替换字符串中使用该变量:
RewriteEngine on
RewriteCond %{HTTPS} !=on
RewriteCond %{HTTP_HOST} mydomain\.com$
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]
答案4
在按照 geocar 的建议打开日志记录并进行了一些研究后,我发现问题在于 /etc/apache2/ports.conf 中缺少一个语句,导致 :443 重叠。我解决了这个问题,问题就解决了。感谢大家的见解和帮助。