Я переписал правило, чтобы перенаправить на www и переписать правила для перенаправления на ssl. Это моя желаемая установка и все работает отлично, за исключением, когда я добавить новое условие:Mod Переписать не перенаправлять, как ожидалось
RewriteCond %{REQUEST_URI} !^/new-review?.* [NC]
Если это условие истинно, я не хочу, чтобы редирект SSL произойти. Проблема, которую я вижу, заключается в том, что когда я это делаю, весь URL перенаправляется на https://www.example.com/index.php?query=string
Нормальное поведение даже для каждой другой страницы работает нормально. URI остается таким же, но выполняется index.php. Вот мой файл .htaccess ниже:
Options +FollowSymLinks -Indexes
RewriteEngine On
RewriteCond %{HTTP_HOST} ^(?!www\.).*$ [NC]
RewriteRule ^(.*)$ https://www.%{HTTP_HOST}/$1 [R=301,L]
RewriteCond %{REQUEST_URI} !^/new-review?.* [NC]
RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.php
Мое ожидаемое поведение является кто-то типами в URL http://www.example.com/new-review?query=string и эта страница запускает код на index.php без переключения пользователей Uri к index.php. Я просто не могу понять, почему последнее правило перезаписи:
RewriteRule . index.php
следует за ожидаемым поведением за все, кроме одного условия. Все, что я хочу, - это то, что эта страница работает как страница, отличная от ssl, но все еще выполняется через index.php.
Прежде всего, вы переписывания не-WWW версия для HTTPS уже - в этом случае ваш RewriteCond для/у-обзор приходит слишком поздно уже. И RewriteCond влияет только на RewriteRule, который следует за ним, поэтому ваше последнее правило не зависит от проверки состояния для '! ^/New-review?. *' В вашей текущей настройке. – CBroe
Но если предположить, что URL-адрес, который они вводят, это «http: // www example.com/new-review?query=string», тогда первое условие потерпит неудачу, и ничего не произойдет, второе условие должно потерпеть неудачу, и ничего не произойдет, а третье условие должно всегда происходить до тех пор, пока не будет обнаружен новый просмотр файла или каталога. Кажется, что последний RewriteRule для index.php отправляет внешнее перенаправление, а не только внутреннюю переписывание запроса. –