使用 mod_rewrite 强制 SSL

使用 mod_rewrite 强制 SSL

我有以下语句,它完美地重定向 :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 重叠。我解决了这个问题,问题就解决了。感谢大家的见解和帮助。

相关内容