Мне нужно изменить свой, .htaccess
и есть две строки, которые я не понимаю.
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule ^(.+)$ index.php?url=$1 [QSA,L]
Когда мне следует использовать эти строки?
Мне нужно изменить свой, .htaccess
и есть две строки, которые я не понимаю.
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule ^(.+)$ index.php?url=$1 [QSA,L]
Когда мне следует использовать эти строки?
Ответы:
Не то место, чтобы давать полное руководство, но вот оно вкратце;
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, на которых можно поучиться.
?
на &
, что делает его невозможно различить /page&foobar
против /page?foobar
. Как я могу остановить замену QSA ?
на &
?
QSA
расшифровывается как Query String Append; L
означает последнее (означает выполнить и прекратить искать следующее совпадение)
Если выполняются следующие условия, перепишите 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]
Другой пример:
RewriteRule "/pages/(.+)" "/page.php?page=$1" [QSA]
С флагом [QSA] запрос на
/ pages / 123? один = два
будет отображаться на
/page.php?page=123&one=two