Apache-2.4

Apache 反向代理雙斜杠

  • March 29, 2018

我的虛擬主機中有一個反向代理設置。但是,當我訪問該站點時:https://example.com而不是https://example.com/在瀏覽器地址欄中,我得到https://example.com//. 為什麼我有兩個斜杠?我的 apache conf 有問題嗎?(在下面提供)還是尾部斜杠可能是由反向代理後面的站點的 apache conf/.htaccess 添加的?

我目前的設置:

<VirtualHost *:80>
   ...
   RewriteEngine On
   RewriteRule ^(.*)$ https://example.com/$1 [R=301,L]
</VirtualHost>
<VirtualHost *:443>
   ...
   ProxyRequests Off
   SSLProxyEngine on
   ProxyPass / https://example.proxy.com/
   ProxyPassReverse / https://example.proxy.com/
</VirtualHost>

當我訪問該站點時:https://example.com而不是https://example.com/在瀏覽器地址欄中,我得到https://example.com//.

這兩個請求,帶和不帶斜杠,實際上是一回事。在這兩種情況下,瀏覽器都會向您的伺服器發送相同的請求。因此,除非存在一些本地記憶體問題,否則很難理解為什麼在這兩種情況下會得到不同的響應?

(有關瀏覽器如何處理域上的尾部斜杠的更多資訊,請參閱我對 Pro Webmasters 堆棧上以下問題的回答:https ://webmasters.stackexchange.com/questions/35643/is-trailing-slash-自動添加-點擊-首頁-url-in-browser )

但是,容器RewriteRule中的指令總是會產生一個雙斜杠 - 所以也許你看到了這個早期(錯誤)重定向的記憶體響應(或瀏覽器自動完成)?請注意,瀏覽器會硬記憶體 301 重定向。<VirtualHost *:80>

RewriteRule ^(.*)$ https://example.com/$1 [R=301,L]

虛擬主機上下文中,$1反向引用將擷取 URL 路徑上的斜杠前綴(這與目錄.htaccess上下文不同)。

您需要刪除替換中的斜杠,或者從擷取的模式中取出第一個斜杠(或使用REQUEST_URI伺服器變數)。例如:

RewriteRule ^/(.*) https://example.com/$1 [R=301,L]

(不需要字元串結尾的錨點,因為*預設情況下是貪婪的。)

並確保您的瀏覽器記憶體已清除。

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