Что такое 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