我配置了以下规则:
<IfModule mod_rewrite.c>
Options -MultiViews
RewriteEngine On
RewriteCond %{REQUEST_URI} !^/foo/bar.php
RewriteCond %{HTTPS} !=on
RewriteRule ^/?(.*) https://%{SERVER_NAME}/$1 [R,L]
RewriteCond %{HTTP_HOST} ^(domain.com|www.domain.com)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ web/app.php [QSA,L]
</IfModule>
我希望使用HTTP的所有请求都被重定向到HTTPS,但特定路径除外:/foo/bar.php。
第二条规则将所有内容重定向到web / app.php脚本(Symfony2)。
现在一切正常,但当我查询http://domain.com/foo/bar.php时,我被重定向到https://domain/com/web/app.php。
如果我查询https://domain/com/foo/bar.php,它的工作正常。
这对我没有任何意义,为什么我会被重定向到&#34; https://domain/com/web/app.php&#34; ?我错过了什么吗?
谢谢!
答案 0 :(得分:1)
在第一条规则中使用THE_REQUEST
变量而不是REQUEST_URI
。 THE_REQUEST
变量表示Apache从您的浏览器收到的原始请求,并且在执行某些重写规则后不会被覆盖。
Options -MultiViews
RewriteEngine On
RewriteCond %{THE_REQUEST} !/foo/bar.php
RewriteCond %{HTTPS} !=on
RewriteRule ^/?(.*) https://%{SERVER_NAME}/$1 [R=302,L]
RewriteCond %{HTTP_HOST} ^(www\.)?domain\.com$
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ web/app.php [QSA,L]