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

rks48beu  于 2023-08-06  发布在  其他
关注(0)|答案(7)|浏览(132)

我知道有很多类似的线程,但似乎没有一个符合我的确切问题。这是我正在尝试做的:

(1) http://www.mydomain.com/ -> https://mydomain.com/
(2) http://mydomain.com/     -> https://mydomain.com/
(3) https://www.mydomain.com -> https://mydomain.com/

字符串
理想情况下,我也想涵盖的情况,如果我将添加更多的子域,自动表现如下(最好是在一个通用的方式,将工作的任何子域我添加)。

(4) http://sub.mydomain.com/ -> https://sub.mydomain.com/


在这一点上,我想知道是否有可能创建一个单一的.htaccess文件,做我需要的一切,虽然我不得不承认,我理解正则表达式,但我不完全是一个mod_rewrite uberpro。
以下是我已经尝试过的解决方案:

我的SSL证书覆盖了www-subdomain,所以我不是在寻找“不可信连接”错误解决方案,我知道这是不可能的。

xmq68pz9

xmq68pz91#

我发现当你有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]

字符串
希望这对某人有帮助!

5cg8jx4n

5cg8jx4n2#

将以下代码放入DOCUMENT_ROOT/.htaccess文件:

RewriteEngine On

# remove www and add https
RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
RewriteRule ^ https://%1%{REQUEST_URI} [L,R=301,NE]

# add https
RewriteCond %{HTTPS} !on
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301,NE]

字符串

gblwokeq

gblwokeq3#

强制使用HTTPS

Options +FollowSymLinks
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}

字符串

强制www为非www

Options +FollowSymLinks
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www.bewebdeveloper.com$
RewriteRule ^(.*) http://bewebdeveloper.com/$1  [QSA,L,R=301]

yqkkidmi

yqkkidmi4#

RewriteEngine on

RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTP_HOST} ^www\.([^.]+\.[^.]+)$ [NC]
RewriteRule ^ https://%1%{REQUEST_URI} [L,R=301,NE]

字符串
此脚本将重定向

同时保留子域。

svgewumm

svgewumm5#

我发现以下答案符合您的要求:
www to non-www with https无其他子域

RewriteEngine on

RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ https://%1/$1 [R=301,L]

RewriteCond %{HTTPS} !on
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

字符串
满足所有三(3)个条件:

(1) http://www.example.com/ -> https://example.com/
(2) http://example.com/     -> https://example.com/
(3) https://www.example.com -> https://example.com/


没有其他子域比www这样:

(4) http://others.example.com -> https://others.example.com/
(5) https://others.example.com -> https://others.example.com/

nuypyhwy

nuypyhwy6#

只需在root.htaccess文件中添加以下代码

RewriteCond %{HTTP_HOST} ^www\.example\.com [NC]
RewriteRule ^(.*)$ https://example.com/$1 [L,R=301]

字符串

utugiqy6

utugiqy67#

没有一个例子对我有效,它们似乎只是陷入了一个循环,下面的工作虽然。

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

    # match non https and redirect to https
    RewriteCond %{HTTP:X-Forwarded-Proto} !https
    RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]

字符串
顺序很重要,在某些情况下,它会阻止第三次重定向。
如果你想使用一个子域名(www.以外的任何东西),只需删除第一个规则集。
因此,对于子域名所有你需要的是

# match non https and redirect to https
    RewriteCond %{HTTP:X-Forwarded-Proto} !https
    RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]


我使用Cloudways服务,我发现这是唯一有效的方法

相关问题