Перезапись URL IIS с помощью маршрутизации для поддоменов и необязательных параметров в веб-формах ASP.Net 4.5 - PullRequest
0 голосов
/ 18 октября 2019

Я пытаюсь объединить перезапись 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 =, потому что это было бы несовместимо с тем, как страницы выбирают данные на основе строк запроса.

1 Ответ

0 голосов
/ 24 октября 2019

  <rule name="Rewrite subdomains">
    <match url=".*" />
    <conditions>
      <add input="{HTTP_HOST}" pattern="^(^$|[^\-]*)(^$|[\-]?)([^\-]\w)\.example\.com$" />
      <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
    </conditions>
    <action type="Rewrite" url="{ToLower:/local/{C:3}{C:2}{C:1}{PATH_INFO}}" appendQueryString="true" />
</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.com/{R:1}" />
    </rule>
    <preConditions>
      <preCondition name="ResponseIsHtml1">
        <add input="{RESPONSE_CONTENT_TYPE}" pattern="^text/html" />
      </preCondition>
    </preConditions>
  </outboundRules>
</rewrite>
...