Apache 反向代理雙斜杠
我的虛擬主機中有一個反向代理設置。但是,當我訪問該站點時:
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]
(不需要字元串結尾的錨點,因為
*
預設情況下是貪婪的。)並確保您的瀏覽器記憶體已清除。