www和https重定向不能按要求工作

www和https重定向不能按要求工作

问题描述:

我似乎无法让myredirects正常工作。我的目标是:www和https重定向不能按要求工作

  1. 重定向http://example.comhttps://www.example.com
  2. 重定向http://www.example.comhttps://www.example.com

目标1已已位于已经实现,但问题是重定向http://www.example.comhttps://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虚拟主机如下:

方法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

apache是​​否拥有www.enmowe.com的虚拟主机条目,因为如果它没有,那么重写规则不会触发...... –

+0

www.enmowe.com已被设置为虚拟主机中的ServerAlias –

你想重定向如果协议是不正确的的主机名。所以,你要制定这两个条件:

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标记,因为它与你的问题无关。

+0

谢谢,这只适用于部分。它将url设置为https:// www,当它的http:// enmowe ...或http://www.enmowe ...但是,https:// enmowe ...仍然不会重定向到https:/ /www.enmowe ... –

+0

这可能是由于我从你的问题中复制的正则表达式。我没有测试。启用[重写调试](https://*.com/questions/9632852/how-to-debug-apache-mod-rewrite)并查看第二个条件是否匹配。 – blafasel

+0

这是我在enmowe.com.com虚拟主机文件:! '上 的RewriteCond%RewriteEngine叙述{} HTTPS = ON [OR] 的RewriteCond%{HTTP_HOST} ^(WWW \ enmowe \。 com)?$ RewriteRule ^(。*)https://www.% {SERVER_NAME}%{REQUEST_URI} [END,NE,R =永久]' 这是基于你的回答。但是,仍然“https:// enmowe.com”似乎没有被重定向。 我还补充: '的RewriteCond%{} HTTPS上 的RewriteCond%{HTTP_HOST} ^(WWW \ enmowe \ .COM。)$ 重写规则^ HTTPS?(*):// WWW。%{SERVER_NAME}%{REQUEST_URI} [END,NE,R =永久]' 真的很奇怪。我为'www.enmowe.com'创建了一个虚拟主机。 –