Apache mod_rewrite - 重定向到HTTPS,除了一个友好的URL(控制器)

时间:2015-05-10 01:15:04

标签: php apache mod-rewrite

我有一个网站需要强制使用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]

1 个答案:

答案 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