mod_rewrite - конвертировать пути в строку запроса - PullRequest
1 голос
/ 20 августа 2010

считают это правило

RewriteRule ^/models/(.*)/(.*)$ /models?$1=$2 [NC,L]

это переписывает /models/application/lawnmower в /models?appliction=lawnmower

хорошо, только то, что я хочу

теперь рассмотрим это правило (существует до 6 пар имя / значение)

RewriteRule ^/models/(.*)/(.*)/(.*)/(.*)$ /models?$1=$2&$3=$4 [NC,L]  

это должно переписать

/models/application/lawnmower/series/xp

до

/models?application=lawnmower&series=xp  

но на самом деле это создает

/models?application/lawnmower=series&GX=  

ультимативно, что мне нужно сделать, это взять каждое значение, которое следует / моделирует и разобрать его в пары имя / значение в форме qs

любые мысли

1 Ответ

1 голос
/ 20 августа 2010

Имея немного больше информации, вы можете взять ваши URL с произвольным числом пар ключ-значение и преобразовать их в строку запроса для передачи в ваш скрипт.Если я правильно помню, Гамбо ответил на аналогичный вопрос с некой «петлей», которая допускала бы нечто подобное.

Однако, как я полагаю, он указал в то время, иЯ укажу вам сейчас, делать это с mod_rewrite действительно не очень хорошая идея.Гораздо лучше просто mod_rewrite переписать ваш URL в ваш скрипт:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^/models/.*$ /models [NC,L]

... Затем проанализировать исходное значение REQUEST_URI, чтобы извлечь нужную информацию.Выбранный вами язык сценариев является гораздо более подходящим инструментом для этой задачи, чем mod_rewrite.

Что касается исправления вашего текущего правила, я думаю, возможно, ваш запрос к серверу имел косую черту?Поскольку ваши (.*) группировки могут совпадать с чем угодно (или ничем), они будут жадно использовать первую косую черту как часть имени ключа, если за вами следуют три других косых черты.Простым решением было бы не совпадать с косыми чертами в вашей группе захвата:

RewriteRule ^/models/([^/]*)/([^/]*)/([^/]*)/([^/]*)$ /models?$1=$2&$3=$4 [NC,L]  

Обратите внимание, что если вы попытаетесь сделать это как последовательность из шести отдельных правил, у вас закончатся обратные ссылкиТак как самое большее, что вы можете получить (что вы определили), это 9.

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