Использовать правило перезаписи по строке запроса - PullRequest
3 голосов
/ 20 октября 2011

Как я могу сделать так, что если QUERY_STRING соответствует чему-то, оно будет использовать это правило?

Options +FollowSymlinks -MultiViews
RewriteEngine On
RewriteBase /

RewriteRule ^(.*)/?$ index.php?uri=$1 [L,QSA]

RewriteCond %{QUERY_STRING} uri=admin
ReqriteRule ^admin\?(.*)/?$ index.php?uri=admin&q=$1 [L,QSA]

Например.http://localhost/admin?poll/new После того, как ? должен быть параметром q, запрос будет uri=admin&q=poll/new

Любая идея о том, как я мог бы сделать это?

Спасибо.

1 Ответ

1 голос
/ 20 октября 2011

Ну, бывает, что ваша проблема более проста, чем ссылка, которую я вам дал, так как вы не хотите никакого анализа содержимого строки запроса.

Если вы используете эту единственную строку:

RewriteRule ^admin index.php?uri=admin&q= [L,QSA]

Где QSA означает добавление строки запроса к результату. Вы получите внутреннее перенаправление на:

index.php?uri=admin&q=&poll/new

Что не в порядке, это потому, что способ использования аргумента (admin?poll/new) не является стандартным способом. Так что, похоже, нам нужно захватить содержимое строки запроса и поместить его вручную в rewriteRule. Это должно работать (если вам нужно только для / admin URL):

RewriteCond %{REQUEST_FILENAME} admin [NC]
RewriteCond %{QUERY_STRING} (.*) [NC]
RewriteRule .* index.php?uri=admin&q=%1 [L]

Где% 1 - это первое совпадение в круглых скобках в RewriteCond: (.*), означающее все в строке запроса, причем строка запроса - это что-нибудь после знака вопроса. Таким образом, фактически это позволяет admin?poll/new, но также admin?poll/new&foo=toto, давая index.php?uri=admin&q=poll/new&foo=bar

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...