Mod_Rewrite Разница между [L] и [R] - PullRequest
1 голос
/ 16 августа 2011

Я пытаюсь переписать любой URL с помощью "_excaped_fragment _ = / some / directory" в "/ some / directory? Ajax = 1". Код ниже работает правильно, но я хотел бы сделать это без перенаправления. Это сайт Wordpress.

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /
    AddDefaultCharset UTF-8

    RewriteCond %{QUERY_STRING} ^_escaped_fragment_=(.*)$
    RewriteRule (.*) %1?ajax=1 [L,R=301]

    RewriteRule ^index\.php$ - [L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . /index.php [L]
</IfModule>

Если я уберу «R = 301» и просто оставлю «L», это не сработает. Я читал о том, что [L] не останавливается, когда из .htaccess, но на самом деле я не хочу его останавливать. Я хотел бы просто изменить URL-адрес, а затем выполнить обычную переписку Wordpress.

Есть идеи? Дайте мне знать, если вам нужна дополнительная информация.

Edit: Хотел добавить ответный вопрос. Почему редирект работает, а не редирект не работает? Изменяется ли URL-адрес при его перемещении вниз по файлу или только по последнему правилу?

1 Ответ

0 голосов
/ 07 октября 2011

[L] остановит любую дальнейшую обработку в .htaccess, если правило соответствует.

То, как вы это написали, [L] сделает это, но затем вы добавите [R = 301], чтоэто редирект.Это приведет к тому, что запрос будет отправлен обратно в «вершину стека» в Apache для обработки, как если бы это был совершенно новый запрос, поскольку вы выполняете перенаправление.ОДНАКО, теперь во второй раз вы получили измененный URL-адрес, потому что перезапись была обработана перед выполнением эстафетной передачи.

Другими словами [L] выполняет искажение, затем говорит: «Хорошо, мыСделано здесь, перейдите к нормальной веб-обработке сейчас ".

[L, R = 301] делает искажение, затем говорит:" Мы закончили с этим, теперь мы должны сказать, кто следующий, это строка, которую мысделал редирект ".

Последняя часть [L, R = 301] запускает совершенно новый набор логики для обработки правил «эй, мы только что получили перенаправление».В вашем случае обработка всей последовательности перезаписи сверху с искаженным URL на этот раз.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...