www和https重定向无法按预期工作

时间:2017-10-16 20:45:59

标签: apache ssl redirect virtual-hosts

我似乎无法让myredirects按预期工作。我的目标是:

  1. http://example.com重定向到https://www.example.com
  2. http://www.example.com重定向到https://www.example.com
  3. 目标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]
    

    有点感到迷茫

1 个答案:

答案 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代码,因为它与您的问题无关。