Что означает $ 1 [QSA, L] в моем файле .htaccess?


99

Мне нужно изменить свой, .htaccessи есть две строки, которые я не понимаю.

RewriteCond %{REQUEST_FILENAME} !-l

RewriteRule ^(.+)$ index.php?url=$1 [QSA,L]

Когда мне следует использовать эти строки?



Ответы:


216

Не то место, чтобы давать полное руководство, но вот оно вкратце;

RewriteCond в основном означает «выполнить следующее RewriteRule, только если это правда». !-lПуть является условием , что запрос не для ссылки ( !средства нет, -lзначит ссылка)

RewriteRule в основном означает , что , если запрос сделан , что матчи ^(.+)$(соответствует любому URL , кроме корня сервера), то он будет переписан , как index.php?url=$1это означает , запрос olleбудет переписать в виде index.php?url=olle).

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

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

Для получения более полной информации об этом перейдите по ссылкам выше. Поддержка перезаписи может быть немного трудной для понимания, но есть довольно много примеров по stackoverflow, на которых можно поучиться.


QSA заменяет ?на &, что делает его невозможно различить /page&foobarпротив /page?foobar. Как я могу остановить замену QSA ?на &?
Pacerier

1
Я считаю, что нужно помнить все те вещи, которые вы можете создать в ассоциации, например: QSAрасшифровывается как Query String Append; Lозначает последнее (означает выполнить и прекратить искать следующее совпадение)
Жаворонок Роман

8

Если выполняются следующие условия, перепишите URL:
Если запрошенное имя файла не является каталогом,

RewriteCond %{REQUEST_FILENAME} !-d

и если запрошенное имя файла не является обычным файлом, который существует,

RewriteCond %{REQUEST_FILENAME} !-f

и если запрошенное имя файла не является символической ссылкой,

RewriteCond %{REQUEST_FILENAME} !-l

затем перепишите URL-адрес следующим образом:
возьмите полное имя файла запроса и укажите его в качестве значения параметра запроса «url» в index.php. Добавьте любую строку запроса из исходного URL-адреса в качестве дополнительных параметров запроса (QSA) и прекратите обработку этого файла .htaccess (L).

RewriteRule ^(.+)$ index.php?url=$1 [QSA,L]

Документы Apache #flag_qsa

Другой пример:

RewriteRule "/pages/(.+)" "/page.php?page=$1" [QSA]

С флагом [QSA] запрос на

/ pages / 123? один = два

будет отображаться на

/page.php?page=123&one=two


0

Это будет захватывать запросы для файлов, таких как version, releaseи README.mdт.д., которые следует рассматривать либо как конечные точки, если они определены (как в случае / release), либо как «не найдены».

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.