當伺服器受到永久重定向保護時,從 SSL 中排除 Apache 伺服器上的文件?
我有一個在 Ubuntu Server 上執行的 apache 2 Web 伺服器。在啟用以下站點的情況下,我將整個伺服器重定向到 SSL:
<VirtualHost *:80> ServerName hda.surfrock66.com/ Redirect permanent / https://hda.surfrock66.com/ </VirtualHost>
我有一個令人討厭的 php 文件,它可以從無法驗證 SSL 的應用程序上傳數據。有沒有辦法為單個站點上的單個文件禁用 ssl,可能使用 .htaccess 之類的?我已經閱讀了有關此事的大量文章,但都沒有奏效,所以我只能從頭開始尋求幫助。
謝謝!
當然,只需使用 a
RewriteCond
with mod_rewrite 從重定向中排除該特定路徑。我一直這樣做是為了支持讓我們通過 HTTP 加密 ACME 請求,但將其他所有內容重定向到 HTTPS(並讓 HTTPS vhost 宣布 HSTS 以使客戶受益)。但是,我無法理解您的案例。PHP 腳本真的不應該關心傳輸。
在你的容器中嘗試這樣的事情
<VirtualHost>
而不是那個Redirect
節:RewriteEngine on RewriteCond %{REQUEST_URI} !^/excluded/url.php$ RewriteRule ^/(.*) https://%{HTTP_HOST}/$1 [last,redirect=301]
這將通過 HTTPS重定向(使用 301 Moved Permanently響應程式碼)除相同主機名上的相應位置之外的所有內容。
/excluded/url.php
使用%{HTTP_HOST}
而不是顯式主機名意味著可以在任何虛擬主機容器中使用相同的配置片段(我在一個單獨的片段文件中擁有我的片段文件,我Include
在許多虛擬主機中,大大減少了配置文件中的重複)。是的,它有點複雜,但它也更加通用。注意 to 的參數
RewriteCond
是一個正則表達式;在這裡加上前綴是!
因為我們顛倒了它的意思。(應用 RewriteRule 的條件是 RewriteCond不匹配,因此排除那個位置。)此外,請確保容器中有一個
DocumentRoot
指向<VirtualHost>
文件系統中正確位置的文件。否則,重定向可能會按需要工作,但不一定會找到該文件(取決於其他配置值)。