Правило перезаписи URL-адресов IIS — исключить ВСЕ файлы и определенный путь

Я хочу создать правило перезаписи URL-адресов, которое добавляет / к URL-адресам, у которых его нет, например:

www.domain.com/news/latest будет перенаправлен на www.domain.com/news/latest/

Приведенное ниже правило делает именно это, но проблема, с которой я сталкиваюсь, двояка:

  1. Это правило перезаписи применяется к таким вещам, как файлы изображений. Так, например, domain.com/globalassets/icons/image.svg заменяется на domain.com/globalassets/icons/image.svg/, вызывая ошибку 404, что не происходит с файлами CSS, что странно, может быть, потому, что я добавляю их с помощью метода RegisterBundles в MVC?

  2. Это веб-сайт на основе ASP.NET MVC, использующий CMS (эписервер), поэтому я хочу игнорировать любые перенаправления в области администрирования, поэтому я добавил второе правило, но опять же, это касается CSS и изображений, нарушающих область администрирования.

Это то, что у меня есть до сих пор, может ли кто-нибудь помочь мне заставить это правило работать правильно?

<rewrite>
    <rules>

      <rule name="Exclude Slash Episerver " stopProcessing="true">
        <match url="^episerver/" />
        <action type="None" />
      </rule>

      <rule name="Add trailing slash" stopProcessing="true">
        <match url="(.*[^/])$" />
        <conditions>
          <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
          <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
        </conditions>
        <action type="Redirect" redirectType="Permanent" url="{R:1}/" />
      </rule>

    </rules>
</rewrite>

person Ayo Adesina    schedule 20.03.2018    source источник


Ответы (1)


Общие правила перезаписи SEO для IIS, такие как этот, следующие: задокументировано здесь.

В частности, в правиле Trailing Slash отсутствует logicalGrouping="MatchAll" атрибут:

Условия определяются в коллекции <conditions> правила перезаписи. В этой коллекции есть атрибут logicalGrouping, который управляет тем, как оцениваются условия. Если у правила есть условия, то действие правила выполняется только в том случае, если шаблон правила соответствует и:

  • Все условия были оценены как истинные при условии, что использовалась logicalGrouping=MatchAll.
  • По крайней мере одно из условий было оценено как истинное при условии, что использовалось logicalGrouping=MatchAny.

Без этого параметра к именам файлов добавляется завершающая косая черта, потому что это соответствует совпадению каждого из ваших инвертированных правил, а не всем из них.


Полное правило Trailing Slash из приведенной выше ссылки:

<rule name="Trailing Slash" stopProcessing="true"> 
    <match url="(.*[^/])$" /> 
    <conditions logicalGrouping="MatchAll" trackAllCaptures="false"> 
        <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" /> 
        <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" /> 
        <add input="{URL}" pattern="WebResource.axd" negate="true" /> 
    </conditions> 
    <action type="Redirect" url="{R:1}/" /> 
</rule>
person NightOwl888    schedule 20.03.2018