проблема при попытке перенаправить определенный URL с помощью SSL - PullRequest
0 голосов
/ 11 февраля 2011

Я пытаюсь перенаправить все URL-адреса https на http (кроме одной учетной записи / платежа):

RewriteCond %{SERVER_PORT} =80
RewriteCond %{REQUEST_URI} account/payment$
RewriteRule (.*)  https://%{SERVER_NAME}%{REQUEST_URI} [R=301,L]

RewriteCond %{SERVER_PORT} =443
RewriteCond %{REQUEST_URI} !account/payment$
RewriteRule (.*)  http://%{SERVER_NAME}%{REQUEST_URI} [R=301,L]

RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule . - [L]

RewriteRule . index.php [L]

Работает нормально, за исключением случаев, когда я иду на http://url/account/payment, это перенаправить меня на http://url/index.php

Спасибо

Ответы [ 2 ]

0 голосов
/ 11 февраля 2011

Каждый раз, когда RewriteRule совпадает, Apache выполняет внутреннее перенаправление и переоценивает все правила перезаписи по новому (переписанному) пути.

Таким образом, когда RewriteRule . index.php совпадает, REQUEST_URI изменяется на index.php и все правила перезаписи оцениваются снова.

RewriteCond %{REQUEST_URI} !account/payment$ оценивается как true против index.php, и оценивается следующее правило: RewriteRule (.*) <a href="http://%" rel="nofollow">http://%</a>{SERVER_NAME}%{REQUEST_URI}, которое перенаправляет (внешне) в index.php.

0 голосов
/ 11 февраля 2011

Флаг L вызывает повторную вставку уже переписанного URL-адреса в процесс перезаписи:

Помните, однако, что если RewriteRuleгенерирует внутреннее перенаправление (которое часто происходит при перезаписи в контексте для каждого каталога), это приведет к повторному отклонению запроса и будет повторять обработку, начиная с первого RewriteRule.

.любое из первых двух правил применяется к такому повторно введенному URL, вместо этого проверьте строку запроса :

RewriteCond %{SERVER_PORT} =80
RewriteCond %{THE_REQUEST} ^GET\ /account/payment[?\ ]
RewriteRule ^account/payment$ https://%{SERVER_NAME}%{REQUEST_URI} [R=301,L]

RewriteCond %{SERVER_PORT} =443
RewriteCond %{THE_REQUEST} !^GET\ /account/payment[?\ ]
RewriteRule !^account/payment$  http://%{SERVER_NAME}%{REQUEST_URI} [R=301,L]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...