我似乎无法让myredirects按预期工作。我的目标是:
目标1已经实现,但问题是将http://www.example.com重定向到https://www.example.com,实际上导致404错误。我使用Ryte来确定问题,如下所示:
https://enmowe.com/ (403) is not reachable
http://enmowe.com/ (301) is forwarding to https://www.enmowe.com/ (200)
https://www.enmowe.com/ (200) is available
http://www.enmowe.com/ (404) is not reachable
我在Apache VirtualHost中尝试了以下内容:
方法1。
<If "%{HTTP_HOST} != 'www.enmowe.com'">
Redirect "/" "https://www.%{HTTP_HOST}/$1"
</If>
<If "%{SERVER_PROTOCOL} != 'HTTPS'">
Redirect "/" "https://www.%{HTTP_HOST}/$1"
</If>
方法2。
RewriteEngine On
RewriteCond %{HTTP_HOST} !^(www.\.enmowe\.com)?$
RewriteRule (.*) https://www.enmowe.com/$1 [R=301,L,NC]
方法3。
RewriteEngine on
RewriteCond %{SERVER_NAME} =enmowe.com
RewriteRule ^ https://www.%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
有点感到迷茫
答案 0 :(得分:2)
如果协议不正确或主机名,则需要重定向。所以你应该制定这两个条件:
RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule (.*) https://www.enmowe.com/$1 [R=301,L,NC]
RewriteCond %{HTTP_HOST} !^(www.\.enmowe\.com)?$
RewriteRule (.*) https://www.enmowe.com/$1 [R=301,L,NC]
https://enmowe.com
根本无法访问的事实与此无关。如果您希望它可以访问并且您拥有正确的证书,则将主机名添加为ServerAlias
到https服务器的定义。
顺便说一句:请删除virtual-hosts
代码,因为它与您的问题无关。