Apache Rewrite 无法正常工作

Apache Rewrite 无法正常工作

我的 apache2 设置中发生了一件非常奇怪的事情。我只想将 HTTP 重定向到 HTTPS。我尝试了所有可能的方法,例如:

RewriteEngine On

RewriteCond %{HTTPS} !=on
RewriteRule ^/?(.*) https://%{SERVER_NAME}/$1 [R,L]

我把这个放进去了/etc/apache2/apache2.conf,但它根本不起作用。

然后我把上面的代码放进去<VirtualHost *:80>,它起作用了,但我得到的却是

该页面无法正常工作,
kanzan.se 将您重定向了太多次。

这是因为我在缓存服务器 (Varnish) 后面使用端口 80,而在缓存服务器前面使用<VirtualHost *:443>。除此以外,其他一切都运行正常。

我在使用 Varnish 之前就遇到过这个问题,但后来我通过重写解决了这个问题,<VirtualHost *:80>因为这样有效。

Apache 为什么不关心它的主要配置文件/etc/apache2/apache2.conf

答案1

我把这个放进去了/etc/apache2/apache2.conf,但它根本不起作用。

如果你的意思是直接将指令放入服务器中,服务器上下文,那么如果正在访问的文件中含有 mod_rewrite 指令,这些指令将不会执行任何操作<VirtualHost>。您需要启用 mod_rewrite 继承(但您可能不想这样做)。

如果您位于管理 SSL 的代理服务器后面,那么您的应用程序服务器始终通过端口 80 提供内容,因此HTTPS服务器变量永远不会存在on- 因此会出现重定向循环。

但是,代理服务器应该设置X-Forwarded-Proto请求标头,指示(向您的应用程序服务器)正在使用哪种协议。例如,要么httphttps。因此,您可能可以更改指令以改为读取以下内容:

RewriteCond %{HTTP:X-Forwarded-Proto} ^http$ [NC]
RewriteRule ^/?(.*) https://%{SERVER_NAME}/$1 [R,L]

再说一次,您的配置可能正在设置您需要使用的一些其他非标准标头(或环境变量)。

相关内容