我的 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
请求标头,指示(向您的应用程序服务器)正在使用哪种协议。例如,要么http
或https
。因此,您可能可以更改指令以改为读取以下内容:
RewriteCond %{HTTP:X-Forwarded-Proto} ^http$ [NC]
RewriteRule ^/?(.*) https://%{SERVER_NAME}/$1 [R,L]
再说一次,您的配置可能正在设置您需要使用的一些其他非标准标头(或环境变量)。