Что такое L в [QSA, L] в htaccess

QSA означает, что если есть строка запроса, переданная с исходным URL, она будет добавлена ​​к перезаписи (olle? P =1 будет переписано как index.php? Url = olle & p =1.

L означает, что если правило соответствует, не обрабатывайте больше RewriteRules ниже этого.

Привет, каковы несколько простых примеров, чтобы объяснить использование L? Я не могу понять это объяснение выше. Любая помощь будет высоко оценена. Благодарю.

3 ответа

список флагов.htaccess

  • C (приковано следующим правилом)
  • CO = cookie (установить указанный cookie)
  • E = var: value (установить переменную среды var в значение)
  • F (запрещено - отправляет заголовок 403 пользователю)
  • G (ушел - больше не существует)
  • H = обработчик (установить обработчик)
  • L (последний - прекратить обработку правил)

Последнее правило: указывает серверу прекратить переписывание после обработки предыдущей директивы.

  • N (далее - продолжить обработку правил)
  • NC (без учета регистра)
  • NE (не экранируйте специальные символы URL в выводе)
  • NS (игнорируйте это правило, если запрос является подзапросом)
  • P (прокси - то есть apache должен получить удаленный контент, указанный в разделе замещения, и вернуть его)
  • PT (pass through - использовать при обработке URL с дополнительными обработчиками, например, mod_alias)
  • R (временное перенаправление на новый URL)
  • R = 301 (постоянное перенаправление на новый URL)
  • QSA (добавить строку запроса от запроса к замещенному URL)
  • S = x (пропустить следующие x правил)
  • T = MIME-тип (указанная сила MIME-тип)

Флаги добавляются в конец правила перезаписи, чтобы сообщить Apache, как интерпретировать и обрабатывать правило. Они могут использоваться для указания apache обрабатывать правило как нечувствительное к регистру, останавливать обработку правил, если текущий соответствует, или множество других опций. Они разделены запятыми и заключены в квадратные скобки.

QSA флаг означает добавление существующей строки запроса после того, как URI был переписан. Пример:

URL =http://example.com/foo/bar?q=blah

Правило:

RewriteRule ^foo/(.*)$ /index.php?b=$1

Результат =/index.php?b=bar

Обратите внимание, как q=blah ушел Поскольку существующая строка запроса отбрасывается в пользу той, которая находится в цели правила (b=$1). Теперь, если вы включите QSA флаг:

RewriteRule ^foo/(.*)$ /index.php?b=$1 [QSA]

Результат становится =/index.php?b=bar&q=blah


L Флаг просто означает прекращение применения любых правил, которые следуют. Учитывая тот же URL, http://example.com/foo/bar?q=blahи с учетом правил:

RewriteRule ^foo - 

RewriteCond %{REQUEST_URI} !^/bar.php
RewriteRule ^(.*)$ /bar.php?z=$1 

Первое правило применяется, и URI передается без изменений (через - мишень). Затем механизм перезаписи обрабатывает следующее правило, и URI переписывается в /bar.php?z=foo/bar, Что происходит, когда вы добавляете L к концу:

RewriteRule ^foo - [L]

RewriteCond %{REQUEST_URI} !^/bar.php
RewriteRule ^(.*)$ /bar.php?z=$1 

URL http://example.com/foo/bar проходит через нетронутым из первого правила, затем останавливается из-за L флаг. Если URL http://example.com/something/else тогда первое правило не совпадает, а второе применяется, переписывая URI: /bar.php?z=something/else

Обратите внимание, что поскольку механизм перезаписи проходит по всем правилам до тех пор, пока не прекратится изменение URI, L Флаг не будет препятствовать зацикливанию, только любые дальнейшие правила будут применены в текущей итерации.

Пример [L,QSA]

До: https://example.com/index.php?user=robert

      RewriteEngine On
RewriteRule ^user/([^/]+)?$ index.php?user=$1 [L,QSA]

После: https://example.com/user/robert?query=value

Вы также можете использовать другой запрос.

Например: robert?query=value&query2=value2&query3=value3

Другие вопросы по тегам