Що означає $ 1 [QSA, L] у моєму файлі .htaccess?


98

Мені потрібно змінити своє, .htaccessі є два рядки, які я не розумію.

RewriteCond %{REQUEST_FILENAME} !-l

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

Коли я повинен використовувати ці рядки?



Відповіді:


215

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

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

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 docs #flag_qsa

Ще один приклад:

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

З прапором [QSA] запит на

/ сторінки / 123? один = два

буде відображено в

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


0

Це дозволить зафіксувати запити файлів типу version, releaseта README.mdтощо, які слід розглядати як кінцеві точки, якщо вони визначені (як у випадку / випуску), або як "не знайдено".

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.