Перезапись URL переписывает ВСЕ мои файлы с двумя сегментами - PullRequest
0 голосов
/ 20 февраля 2020

Это мое правило в веб-конфигурации

<rule name="rewrite">
  <match url="^([^/]+)/([^/]+)?$" />
<action type="Rewrite" url="/review.aspx?c={R:1}&amp;t={R:2}" appendQueryString="false" />
</rule>

, которое успешно превращает review.aspx?c=value&t=value в /value/value

Теперь моя проблема в том, что мой /css/style.css теперь загружается как review.aspx

Есть ли способ остановить это? Не только с CSS, но со всеми экземплярами?

Ответы [ 2 ]

1 голос
/ 20 февраля 2020

Условия правила перезаписи позволяет вам ограничить применение правила перезаписи, чтобы оно применялось только к тем запросам, где были выполнены условия.

Путем определения Условие, подобное приведенному ниже, позволяет убедиться, что перезапись выполняется только для URL-адресов, которые не соответствуют существующему файлу.

<rule name="rewrite">
  <match url="^([^/]+)/([^/]+)?$" />
  <conditions>
    <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
  </conditions>
  <action type="Rewrite" url="/review.aspx?c={R:1}&amp;t={R:2}" appendQueryString="false" />
</rule>

Это работает так, что для каждого запроса перед выполнением перезаписи Механизм перезаписи проверяет, выполнено ли заданное условие, а затем пропускает правило перезаписи в случае, если условие не было выполнено.

Условие, которое мы определяем: Запрос не должен ссылаться на фактический файл на диске.

Причина этого заключается в том, что мы хотим, чтобы перезапись применялась только к запросам с виртуальными URL-адресами, такими как /value/value, а не к запросам для stati c файлов, таких как /css/style.css.

. что именно означают различные атрибуты условия:

  • input="{REQUEST_FILENAME}" сообщает механизму перезаписи, что мы хотим выполнить тест agai Переменная REQUEST_FILENAME. Значение этой переменной будет примерно таким, как C:/mywebsite/value/value или C:/mywebsite/css/style.css.
  • matchType="IsFile", говорит движку проверить, соответствует ли указанный выше ввод существующему файлу на диске.
  • negate="true" сообщает механизму инвертировать результат проверки, чтобы условие выполнялось, когда ввод не не соответствует существующему файлу, а не когда он совпадает.
0 голосов
/ 20 февраля 2020

Из-за шаблона соответствия вам может потребоваться добавить исключение, например:

<conditions logicalGrouping="MatchAll">
    <add input="{REQUEST_URI}" pattern="\.js|\.css|\.jpg" negate="true" />
</conditions>
...