mod_write бесконечный цикл - PullRequest
       0

mod_write бесконечный цикл

0 голосов
/ 04 декабря 2011

Попытка заменить все экземпляры CMS_ на X. Пока удалось получить только бесконечные циклы.

Input: /mydir/?CMS_q=1&CMS_g=3 ...
Output: ?Xq=1&Xg=3 ...

.htaccess:

RewriteEngine On
RewriteRule ^/?mydir/(.+) $1                      [R]
RewriteRule ^(.*?)CMS_(.*?CMS_.*)$ $1X$2            [N,R]
RewriteRule ^(.*?)CMS_(.*)$ $1X$2               [L,R]

У меня был рабочий сценарий несколько лет назад, и я его потерял. Я не помню, чтобы когда-либо занимался бизнесом «замените 1 за один раз, пока не осталось 1», но я видел, что это предлагалось в аналогичном вопросе. Не могу заставить его работать независимо.

1 Ответ

1 голос
/ 04 декабря 2011

Нельзя сопоставить строку запроса в RewriteRule, которая сопоставляется только с URI.Вы можете удалить CMS_ из строки запроса, используя следующее:

RewriteCond %{QUERY_STRING} (.*)CMS_(.*)
RewriteRule ^(.*)$ /$1?%1X%2

Если разрешить этот цикл, то заменит CMS_ на X , mod_rewrite продолжит цикл черездо тех пор, пока в строке запроса не останется CMS_.Вот тут и вступает в игру второе правило:

RewriteCond %{QUERY_STRING} !CMS_
RewriteRule ^mydir/$ / [L,R]

Сначала нужно проверить, чтобы убедиться, что в строке запроса нет CMS_ (в противном случае правило удаляет mydir будет применен преждевременно), затем удалите mydir впереди.Также не забудьте RewriteEngine On до всего этого.

Эти 2 правила приведут к запросу на http://yourdomain.com/mydir/?CMS_q=1&CMS_w=2&CMS_e=3&CMS_r=4, который будет перенаправлен на http://yourdomain.com/?Xq=1&Xw=2&Xe=3&Xr=4

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