IIS - удалить косую черту, когда каталог - PullRequest
0 голосов
/ 24 августа 2018

Я хочу удалить косые черты из всех запросов от "/" до "", даже если это каталог. Например:

Я хотел бы перенаправить его на "http://bleh.local/sign-in"

  • Ожидаемое поведение: / вход / перенаправлен на / вход
  • Фактическое поведение: / вход перенаправлен на / вход /

Web.config:

<rule name="RemoveTrailingSlashRule1" enabled="true" stopProcessing="true">
      <match url="(.*)/$" />
      <conditions>
        <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
      </conditions>
      <action type="Redirect" url="{R:1}" />
</rule>

applicationHost.config:

<sectionGroup name="rewrite">
    <section name="globalRules" overrideModeDefault="Allow" allowDefinition="AppHostOnly" />
    <section name="rules" overrideModeDefault="Allow" />
    <section name="outboundRules" overrideModeDefault="Allow" />
    <section name="providers" overrideModeDefault="Allow" />
    <section name="rewriteMaps" overrideModeDefault="Allow" />
    <section name="allowedServerVariables" overrideModeDefault="Allow" />
</sectionGroup>

При этой настройке я получаю бесконечные перенаправления, потому что я удалил эту инструкцию из исходной настройки:

<conditions>
    <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
</conditions>

Я думаю, что мои проблемы проистекают из этого: https://support.microsoft.com/en-ca/help/298408/iis-generates-courtesy-redirect-when-folder-without-trailing-slash-is

Есть идеи?

Примечание: Как настроить IIS для обслуживания каталогов без конечных слешей и всегда для обслуживания относительно корневого пути? не решает мою проблему. Обратные слеши добавляются последовательно.

1 Ответ

0 голосов
/ 02 ноября 2018

Это из-за <defaultDocument> в IIS.

<defaultDocument> правило включено в IIS по умолчанию, что заставляет страницу перенаправляться на URL с косой чертой, если она не нашла файл.domain/sign-in/

<rule name="RemoveTrailingSlashRule1" enabled="true" stopProcessing="true">
      <match url="(.*)/$" />
      <conditions>
        <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
      </conditions>
      <action type="Redirect" url="{R:1}" />
</rule>

Теперь это правило сопоставляет URL с косой чертой (и соответствует каталогу) и, в свою очередь, перенаправляет на URL без косой черты.domain/sign-in, который создает цикл.

Решение состоит в том, чтобы добавить правило <defaultDocument enabled="false"></defaultDocument>.

https://docs.microsoft.com/en-us/iis/configuration/system.webserver/defaultdocument/

...