Mod-Rewrite

Apache重寫不起作用

  • September 22, 2018

我的 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

我把它放進去,/etc/apache2/apache2.conf但它根本不起作用。

如果您的意思是您將指令直接放在伺服器中,在伺服器<VirtualHost>上下文中,那麼如果您在被訪問的中有 mod_rewrite 指令,那麼指令將不會做任何事情。您需要啟用 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]

再說一次,您的配置可能正在設置您需要使用的其他一些非標準標頭(或環境變數)。

引用自:https://serverfault.com/questions/932191