Apache 如何在一次跳转中将所有请求重定向到https和非www?

Apache 如何在一次跳转中将所有请求重定向到https和非www?,apache,.htaccess,Apache,.htaccess,我想在主/主页和其他子页面的一次跳转中将所有请求重定向到https和非www。 我正在使用以下htaccess 但是我得到了如下的重定向 我想要这样: http://mytesting.com > https://mytesting.com http://www.mytesting.com > https://mytesting.com http://mytesting.com/faq > https://mytesting.com/fa

我想在主/主页和其他子页面的一次跳转中将所有请求重定向到https和非www。 我正在使用以下htaccess

但是我得到了如下的重定向

我想要这样:

http://mytesting.com          > https://mytesting.com
http://www.mytesting.com      > https://mytesting.com
http://mytesting.com/faq      > https://mytesting.com/faq
https://mytesting.com         > https://mytesting.com
http://www.mytesting.com      > https://mytesting.com
http://www.mytesting.com/faq  > https://mytesting.com/faq
https://mytesting.com/faq     > https://mytesting.com/faq

您可以在一个规则中对两个重定向使用此规则:

RewriteCond %{HTTP_HOST} ^www\. [NC,OR]
RewriteCond %{HTTPS} !on
RewriteCond %{HTTP_HOST} ^(?:www\.)?(.+)$ [NC]
RewriteRule ^ https://%1%{REQUEST_URI} [R=301,L,NE]
以下是对该规则的解释:

  • RewriteCond%{HTTP\u HOST}^www\。[NC,或]
    :如果主机名以
    www.
  • [NC,OR]
    :忽略大小写匹配和
    的下一个条件
  • RewriteCond%{HTTPS}!在
    上:
    未打开HTTPS
  • RewriteCond%{HTTP\u HOST}^(?:www\)?(.+)$[NC]
    :此条件将始终匹配,因为
    www.
    在此处是可选匹配。它用于通过使用捕获组#1中的
    (.+)
    模式捕获
    HTTP\u主机的子字符串
    ,而无需启动
    www.
    (稍后将作为
    %1
    反向引用)。请注意,
    (?:…)
    是一个非捕获组
  • 重写规则^https://%1%{REQUEST_URI}[R=301,L,NE]
    ^
    将始终匹配。此规则将重定向到具有
    R=301
    code的
    https://%1%{REQUEST_URI}
    。其中,
    %1
    是来自
    RewriteCond
    的捕获组#1的反向引用,如上所述
RewriteCond %{HTTP_HOST} ^www\. [NC,OR]
RewriteCond %{HTTPS} !on
RewriteCond %{HTTP_HOST} ^(?:www\.)?(.+)$ [NC]
RewriteRule ^ https://%1%{REQUEST_URI} [R=301,L,NE]