Я делаю правило перезаписи, которое переписывает art/slug/...
в art/.../?art=slug
.Правило, которое я написал, работает, но выдает намеченную строку запроса только при использовании [QSA]
.
. Право над правилом - RewriteCond %{REQUEST_FILENAME} !-f
, чтобы предотвратить зацикливание, если переписанный URL-адрес соответствует существующему файлу.
Я проверил следующие правила и перешел к art/test/
, где $_GET
соответствует var_dump
'd.Вот результаты:
RewriteRule ^art/([^/]*)/?(.*) art/$2?art=$1 [L]
выходы 'art' => string ''
RewriteRule ^art/([^/]*)/?(.*) art/$2?art=$1 [QSA,L]
выходы 'art' => string 'test'
RewriteRule ^art/([^/]*)/?(.*) art/$2?art=test [L]
выходы 'art' => string 'test'
Насколько я понимаю, QSA
предназначен для добавления «исходной» строки запроса к «переписанной».
В моей ситуации у меня нет ни одной строки запроса в исходном URL;это полностью сделано во время переписывания, поэтому в первом примере я не понимаю, почему мой ключ art
установлен пустым (хотя он не является неопределенным).
Давайте предположим, что я неправильно понял QSA
и что это требуется для того, чтобы вообще генерировать любую строку запроса;тогда как получается, что в третьем примере жесткое кодирование значения строки запроса работает без флага QSA
?
Может ли удаление QSA
как-то изменить способ работы моего регулярного выражения?
I 'работает на локальном сервере с WAMP 3.0.6 64bit, Apache 2.4.23 и PHP 7.0.10