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

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

RewriteCond %{REQUEST_FILENAME} !-l

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

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

Ответ 1

Не место для полного учебника, но здесь оно короткое:

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 можно найти несколько примеров.

Ответ 2

Если выполняются следующие условия, перепишите 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]

Ответ 3

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