我有一个网站需要强制使用HTTPS,除非特定网址以模式开头。
问题是我有一个重定向到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]
答案 0 :(得分:3)
%{REQUEST_URI}
之后,也可以使用 %{THE_REQUEST}
代替index.php
来测试原始请求。
根据手册:
<强烈> 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]
请参阅我用作参考的answer。