Apache 坚持不想重定向到 https

Apache 坚持不想重定向到 https

我知道很多人以前问过类似的问题:

我如何将 http 重定向到 https(使用 Apache)?/为什么不这样做?

甚至还有一个“代码”片段维基百科重定向到 https 的 HTTP 301 状态代码的页面。

但经过几个小时的搜索,我尝试了许多不同的方法,但只有一种方法有效:

<meta http-equiv="refresh" content="https://example.org">

作为默认页面/var/www/html/index.html

尽管它成功地重定向了,但它不仅丑陋,而且不受搜索引擎的喜爱,并增加了加载时间。

让我们都处于同一水平 是我的 Apache 配置。我还将 Django 与 Apache 结合使用,以防万一。

以下是我所有尝试的列表:

  1. 使用另一个 VirtualHost

    <VirtualHost *:80>
        Redirect permanent / https://example.org/
    </VirtualHost>
    
  2. 使用重写将未连接到端口 443 的所有内容重定向到相应的 https 页面:

    RewriteEngine On
    RewriteCond %{SERVER_PORT} !443
    RewriteRule ^(/(.*))?$ https://%{HTTP_HOST}/$1 [R=301,L]`
    
  3. 使用维基百科中提到的实现:

    RewriteEngine On
    RewriteCond %{HTTPS} off
    RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
    RewriteRule ^(.*)$ http://%1/$1 [R=301,L]
    RewriteCond %{HTTPS} on
    RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
    RewriteRule ^(.*)$ https://%1/$1 [R=301,L]
    RewriteEngine On
    RewriteCond %{SERVER_PORT} 80
    RewriteRule ^(.*)$ https://example.org/$1 [R,L]
    

apache2.conf我在和文件中都尝试了这些选项(如果有意义的话).htaccess。显然没有成功。奇怪的是,当我访问 example.org 并在它加载后手动输入 example.org/# 时,最后两种方法有效。我也尝试过只使用 example.org/ 和相同的过程,但没有 #。但那不起作用。

还有什么其他选项(用于 301 重定向)?为什么这不起作用?如果可能的话:我该如何修改它才能使其正常工作?

答案1

第一个重定向应该可以工作,如果不行,不要想太多,因为你根本就没有“进入”那个虚拟主机/服务器/配置,如果你有多个 *:80 虚拟主机,请确保它们都有ServerName自己名字的指令,否则 Apache 将不知道将请求传递到哪里。要确保你已正确配置虚拟主机,你可以输入:

apachectl -S

...并确保没有虚拟主机具有相同的名称(或没有),否则第一个匹配获胜。

另外,尝试本地连接,直接针对 IP 进行尝试,并使用非缓存浏览器,以确保您看到的是正确的响应而不是缓存的响应,或者您的名称解析指向其他服务器。例如:

curl -I -H"Host:myserver.example.com" http://192.168.1.10/

简而言之,在虚拟主机中这就足够了:

Redirect / https://myserver.example.com/

相关内容