У меня настроены следующие правила:
<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, он работает нормально.
Это не имеет для меня никакого смысла, почему я должен быть перенаправлен на " https://domain/com/web/app.php "? Я что-то упускаю?
Благодаря !
Используйте переменную 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]