Я пытаюсь объединить перезапись URL IIS с маршрутизацией на сайте веб-форм ASP.Net 4.5 для поддоменов и подкаталогов.
Я пытаюсь объединить перезапись URL в IIS с маршрутизацией в ASP.Net 4.5для сайта веб-форм. У меня есть решение, которое сейчас отлично подходит для перезаписи субдомена с необязательными параметрами для значений маршрутизации, но я изо всех сил пытаюсь передать URL-адреса подкаталогов в маршруты или строки запросов. Большинство параметров, с которыми я работаю, также являются необязательными, поэтому правила должны учитывать любую комбинацию этих параметров или ничего.
Конечной целью является эффект растушевки с разделенными дефисом местоположениями на стороне поддоменов и категориями на стороне подкаталогов. Например, URL-адрес, содержащий все параметры, будет выглядеть примерно так: http://city -state.example.com /ategoryslug / subcategoryslug
Правило, которое я имею в своем web.config для поддоменови маршруты, которые у меня есть в моем RouteConfig.cs, следующие:
<rewrite>
<rules>
<rule name="Rewrite subdomains">
<match url=".*" />
<conditions>
<add input="{HTTP_HOST}" pattern="^(^$|[^\-]*)(^$|[\-]?)([^\-]\w)\.example\.net$" />
<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
</conditions>
<action type="Rewrite" url="{ToLower:/local/{C:3}/{C:1}}" />
</rule>
</rules>
<outboundRules>
<rule name="RewriteRelativePaths" preCondition="ResponseIsHtml1">
<match filterByTags="A, Area, Base, Form, Frame, Head, IFrame, Img, Input, Link, Script" pattern="^/(.*)" negate="false" />
<action type="Rewrite" value="http://example.net/{R:1}" />
</rule>
<preConditions>
<preCondition name="ResponseIsHtml1">
<add input="{RESPONSE_CONTENT_TYPE}" pattern="^text/html" />
</preCondition>
</preConditions>
</outboundRules>
</rewrite>
From RouteConfig.cs
// Geographic SubDomains
routes.MapPageRoute("local/state", "local/{state}", "~/local/Default.aspx");
routes.MapPageRoute("local/state/city", "local/{state}/{city}", "~/local/Default.aspx");
Potential Conflicting routes:
//Category
routes.MapPageRoute("category", "{catslug}", "~/category/Default.aspx");
//SubCategory
routes.MapPageRoute("category/subcategory", "{catslug}/{scatslug}", "~/category/Default.aspx");
Ожидаемый результат в конце должен переписать что-то вроде http://city -state.example.com /ategoryslug / subcategoryslug до ~ / local / {state} / {city} / {categoryoryslug} / {subcategoryslug}, но я вижу потенциальный конфликт между этим маршрутом и чем-то вроде ~ / local / {state} / {categoryoryslug}, в котором я не 'Не думаю, что приложение сможет различать штат / категорию и штат / город.
У меня также есть несколько потенциально конфликтующих маршрутов для категории / подкатегории, где корневой домен отображает категории с использованием слагов. Меня беспокоит то, что маршрут, содержащий тот же шаблон категории / подкатегории, может в конечном итоге быть отправлен в корневой домен, а не в поддомен.
Из-за вышеупомянутых проблем я думаю, что использование строк запросов для категорий было бы лучше, чем использование маршрутов. прямо сейчас я могу загрузить страницу на http://city -state.example.com /? category = categoryorlulu & subcategory = subcategoryslug просто отлично. Далее я хотел бы иметь возможность изменить эти строки запроса на categoryoryslug / subcategoryslug и переписать его в / local / {state} / {city} /? Categoryoryslug = categoryoryslug & subcategoryslug = subcategoryslug. Я НЕ хочу, чтобы URL был переписан на что-то вроде? Category = & subcategory =, потому что это было бы несовместимо с тем, как страницы выбирают данные на основе строк запроса.