2

次のようなURLがあります

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

この Web サイトは、URL の書き換えに Helicon Isapi_Rewrite を使用する IIS 6 MVC 3 アプリケーションです。

4

2 に答える 2

0

最良の方法は、各ルールが 1 ペア、2 ペア、3 ペアのパラメータを処理する一連のルールを作成することです...

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]
于 2012-07-03T09:21:23.290 に答える
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 の組み合わせが無制限の場合、これは理想的なソリューションではありませんが、私の場合は有限であるため、管理が非常に簡単です。

于 2012-07-03T20:07:18.153 に答える