2

У меня есть URL-адрес, который может выглядетьперезаписи URL с IIS 6 и MVC 3

domain.com/f1/v1/f2/v2/f3/v3/f4/v4/f5/v5/f6/v6 

с вариациями меньших графов, таких как

domain.com/f1/v1/f2/v2/f3/v3/f4/v4/f5/v5 
domain.com/f1/v1/f2/v2/f3/v3/f4/v4 
domain.com/f1/v1/f2/v2/f3/v3 
domain.com/f1/v1/f2/v2 
domain.com/f1/v1 

как я могу построить правила перезаписи, которые будут строить следующие

domain.com/models?f1=v1&f2=v2...f6=v6 

этот сайт является IIS 6 MVC 3 приложение с помощью Helicon Isapi_Rewrite для перезаписи URL-адресов.

+0

Я не знаю, как это сделать в Helicon, но IIRF включает примеры преобразования параметров строки запроса в сегменты URL-адресов и наоборот. Вы можете взять эти примеры и применить их к Helicon или просто использовать IIRF. http://cheeso.members.winisp.net/Iirf21Help/html/1ccbf1ec-0984-49d9-9ab0-63eab3ff9c63.htm – Cheeso

+0

Почему вы не используете встроенный движок маршрутизации mvc? –

ответ

0

Самый лучший способ, чтобы создать набор правил, каждое правило будет обрабатывать 1 пара, 2 пары, 3 пары paraters ...

RewriteEngine on 
RewriteBase/

# rule for one pair of parameters 
RewriteCond %{HTTP:Host} ^domain\.com$ [NC] 
RewriteRule ^([^/]+)/([^/]+)$ /models?$1=$2 [NC,L] 

# rule for two pairs of parameters 
RewriteCond %{HTTP:Host} ^domain\.com$ [NC] 
RewriteRule ^([^/]+)/([^/]+)/([^/]+)/([^/]+)$ /models?$1=$2&$3=$4 [NC,L] 
+0

Этот подход работает, однако, вы ограничены $ 1- $ 9. Я придумал решение, используя файл карты. См. Ответ. – jason

+0

Я предоставил вам решение проблемы с $ 1- $ 9, см. Комментарий – Andrew

0

Я пришел к этому решению, используя карту. Основная проблема, с которой я столкнулся, превысила ограничение в размере $ 1 - $ 9 для заполнителей.

RewriteMap filtermap txt:content/maps/filtermap.txt [NC] 

RewriteCond ${filtermap:$6|NOT_FOUND} !NOT_FOUND [NC] 
RewriteRule ^models/([^/]*/[^/]*)/([^/]*/[^/]*)/([^/]*/[^/]*)/([^/]*/[^/]*)/([^/]*/[^/]*)/([^/]*/[^/]*) /models/?${filtermap:$1}&${filtermap:$2}&${filtermap:$3}&${filtermap:$4}&${filtermap:$5}&${filtermap:$6} [NC,L] 

RewriteCond ${filtermap:$5|NOT_FOUND} !NOT_FOUND [NC] 
RewriteRule ^models/([^/]*/[^/]*)/([^/]*/[^/]*)/([^/]*/[^/]*)/([^/]*/[^/]*)/([^/]*/[^/]*)     /models/?${filtermap:$1}&${filtermap:$2}&${filtermap:$3}&${filtermap:$4}&${filtermap:$5} [NC,L] 

RewriteCond ${filtermap:$4|NOT_FOUND} !NOT_FOUND [NC] 
RewriteRule ^models/([^/]*/[^/]*)/([^/]*/[^/]*)/([^/]*/[^/]*)/([^/]*/[^/]*)        /models/?${filtermap:$1}&${filtermap:$2}&${filtermap:$3}&${filtermap:$4} [NC,L] 

RewriteCond ${filtermap:$3|NOT_FOUND} !NOT_FOUND [NC] 
RewriteRule ^models/([^/]*/[^/]*)/([^/]*/[^/]*)/([^/]*/[^/]*)            /models/?${filtermap:$1}&${filtermap:$2}&${filtermap:$3} [NC,L] 

RewriteCond ${filtermap:$2|NOT_FOUND} !NOT_FOUND [NC] 
RewriteRule ^models/([^/]*/[^/]*)/([^/]*/[^/]*)               /models/?${filtermap:$1}&${filtermap:$2} [NC,L] 

RewriteCond ${filtermap:$1|NOT_FOUND} !NOT_FOUND [NC] 
RewriteRule ^models/([^/]*/[^/]*)                   /models/?${filtermap:$1} [NC,L] 

Его не очень симпатичный, но он действительно работает. Карта фильтра выглядит следующим образом

p1/v1 p1=v1 
    p2/v2 p2=v2 
... 

Это не является идеальным решением, если ваши комбинации p1/v1 безграничны, но мой конечны поэтому его довольно легко управлять.

+0

, вы можете пойти дальше $ 9 и использовать $$ 10 - $$ 99 значений в ISAPI_Rewrite 3 – Andrew