[英]Apache mod_rewrite - Redirect to HTTPS except one friendly URL (Controller)
我有一個網站需要強制HTTPS,除非特定的URL以模式開頭。
問題是我重定向到index.php以在系統中加載PHP控制器。 當重定向到index.php時,重寫規則將再次應用,但是在重定向之后,%{REQUEST_URI}將變為index.php,並且可以使用http的URL重定向到https。
有辦法解決嗎? 內部重定向后或保持REQUEST_URI不變后,可能不再閱讀規則。
RewriteEngine On
RewriteCond %{REQUEST_URI} !^/ok_with_http
RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* index.php [QSA,L]
即使內部重定向到index.php
也可以使用%{THE_REQUEST}
代替%{REQUEST_URI}
來測試原始請求。
根據手冊:
THE_REQUEST
瀏覽器發送到服務器的完整HTTP請求行(例如
GET /index.html HTTP/1.1
)。 這不包括瀏覽器發送的任何其他標頭。 與以下大多數其他變量不同,該值尚未被轉義(解碼)。
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteCond %{THE_REQUEST} !^[A-Z]+\ /ok_with_http(/\S*)?\s
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* index.php [QSA,L]
請參閱我用作參考的答案 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.