2015-11-03 2 views
1

я следующие правила настроены:Mod_rewrite: Странное поведение с двумя правилами перезаписи

<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"? Я что-то упускаю ?

Спасибо!

ответ

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] 
+1

Черт, он отлично работает, спасибо большое! (И спасибо за очистку второго правила!): D) – Inpu

Смежные вопросы