htaccess强制https并将www重定向到非www,但没有其他子域

sub*_*nar 19 apache .htaccess mod-rewrite https

我知道有很多类似的线程,但它们似乎都不符合我的确切问题.这是我正在尝试做的事情:

(1) http://www.mydomain.com/ -> https://mydomain.com/
(2) http://mydomain.com/     -> https://mydomain.com/
(3) https://www.mydomain.com -> https://mydomain.com/
Run Code Online (Sandbox Code Playgroud)

理想情况下,如果我要添加更多子域,我还想覆盖这种情况,以便自动执行以下操作(最好以通用的方式适用于我添加的任何子域).

(4) http://sub.mydomain.com/ -> https://sub.mydomain.com/
Run Code Online (Sandbox Code Playgroud)

在这一点上,我想知道是否有可能创建一个单独的.htaccess文件来完成我需要的一切,虽然我不得不承认我理解正则表达式,但我不是一个mod_rewrite uberpro.

以下是我已经尝试过的解决方案:

我的SSL证书涵盖www-subdomain,所以我不是在寻找'不可信连接'错误解决方案,我知道这是不可能的.

小智 23

我发现当你有一些https://www.example.com并重定向到https://example.com时,大多数建议都没有被捕获.

以下适用于所有排列:

RewriteEngine On

# match any URL with www and rewrite it to https without the www
RewriteCond %{HTTP_HOST} ^(www\.)(.*) [NC]
RewriteRule (.*) https://%2%{REQUEST_URI} [L,R=301]

# match urls that are non https (without the www)
RewriteCond %{HTTPS} off
RewriteCond %{HTTP_HOST} !^(www\.)(.*) [NC]
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
Run Code Online (Sandbox Code Playgroud)

希望这有助于某人!


anu*_*ava 11

将此代码放入您的DOCUMENT_ROOT/.htaccess文件中:

RewriteEngine On

RewriteCond %{HTTPS} off
RewriteCond %{ENV:HTTPS} off
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301,NE]

RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
RewriteRule ^ https://%1%{REQUEST_URI} [L,R=301,NE]
Run Code Online (Sandbox Code Playgroud)

  • 事实证明`%{HTTPS}`是mod_ssl的一个功能,它不在我的主机的机器上运行.相反,他们使用pound作为HTTPS前端,它提供环境变量`%{ENV:HTTPS}`.所以我添加了一行来检查这一点,并留下旧版本来处理遗留设置.我终于工作的.htaccess现在看起来像这样:`RewriteEngine On RewriteCond%{HTTPS}!= on RewriteCond%{ENV:HTTPS}!= on RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R = 301,NE] RewriteCond%{HTTP_HOST} ^ www \.(.+)$ [NC] RewriteRule ^ https://%1%{REQUEST_URI} [L,R = 301,NE] (2认同)