HTTP到HTTPSredirect不在Apache 2.4上工作

我有这个Apacheconfiguration:

<VirtualHost *:80> DocumentRoot "/home/example/public_html/" ServerName www.example.com <Directory "/home/example/public_html/"> allow from all RewriteEngine on RewriteRule ^(.*)$ https://www.example.com/$1 [R=301,L] </Directory> </VirtualHost> 

redirect似乎从来没有火,只是从http服务的文件。 我尝试了各种组合,但似乎没有任何工作。

mod_rewrite已启用(使用LoadModule rewrite_module modules / mod_rewrite.so)

谁能帮忙?

这太复杂了。 您只需要两个(或三个)指令将所有内容redirect到HTTPS,例如

 <VirtualHost *:80> ServerName www.example.com ServerAlias example.com Redirect permanent "/" "https://www.example.com/" </VirtualHost> 

这将redirect有和没有www到规范的HTTPS网站。

另一个答案已经给出了解决scheme,我想我会添加为什么你的代码可能无法按预期工作。

mod_rewrite已启用

但是,默认情况下, 目录 (或.htaccess )上下文中的mod_rewrite指令不会被inheritance。 (mod_rewrite在这方面的performance与其他模块稍有不同。)

所以,如果你在使用mod_rewrite的/public_html目录中有一个.htaccess文件(例如,默认的WordPress安装),那么这将完全覆盖服务器configuration中的父<Directory>容器中的mod_rewrite指令。 所以,你的redirect将永远不会发生。

但是,如果将mod_rewrite指令从<Directory>容器中移出并直接移入<VirtualHost>容器,则可能会正常工作。 在虚拟主机(或服务器configuration)上下文中的mod_rewrite指令将 .htaccess 之前执行。 例如:

 <VirtualHost *:80> DocumentRoot "/home/example/public_html/" ServerName www.example.com RewriteEngine on RewriteRule ^(.*)$ https://www.example.com/$1 [R=301,L] <Directory "/home/example/public_html/"> Require all granted </Directory> </VirtualHost> 

请注意,这纯粹是理论上的。 这里根本不需要mod_rewrite,而是使用Esa Jokinen的解决scheme。

还要注意, allow from all都是Apache 2.2语法。 这在Apache 2.4上已被弃用,应该用相应的Require指令replace。 请参阅Apache文档 – 从2.2升级到2.4