URL-адрес IIS переписать | Как удалить каталог и расширение?

Я довольно долго боролся со следующим:

URL-адрес по умолчанию:

examplesite.com/folder/about.cshtml

Желаемый URL:

examplesite.com/about

В основном я хочу выполнить две вещи:

  • 1 Удалите расширение файла с действительно компактным кодом.
  • 2 Удалите папку, в которой находится страница «О программе».

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

Поэтому я надеялся, что кто-то может поделиться правилом, которое компактно и соответствует моим потребностям. Или отдельные правила с тем же результатом.

Каждый вклад очень ценен :)


person Nikita    schedule 21.02.2013    source источник
comment
IIRC с Razor вы можете удалить .cshtml в любом случае - asp.net/web-pages/tutorials/working-with-pages/   -  person Lloyd    schedule 22.02.2013


Ответы (1)


Я не уверен, что полностью понимаю ваши потребности, но вот кое-что, по крайней мере, близкое. Он удаляет первую папку и расширение файла (поэтому examplesite.com/folder/about.cshtml становится examplesite.com/about, а examplesite.com/folder/help/about.cshtml становится examplesite.com/help/about). Если вы хотите удалить все папки, просто удалите файл ?.

<rule name="Remove Directory and Extension">
    <match url="^(.*?)/(.*)\.cshtml$" />
    <action type="Rewrite" url="{R:2}" />
</rule>

Обновление:

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

<rules>
  <rule name="Redirect requests to friendly URLs">
    <match url="^(.*?)/(.*)\.cshtml$" />
    <action type="Redirect" url="{R:2}" />
  </rule>
  <rule name="Rewrite friendly URLs to phsyical paths">
    <match url="^(.*)$" />
    <action type="Rewrite" url="folder/{R:0}.cshtml" />
  </rule>
</rules>

Первое правило гарантирует, что все запросы направляются на понятные URL-адреса. Второй берет понятный URL-адрес и переписывает его на ваш физический путь, где физический путь — folder/[FRIENDLY_PATH].cshtml.

person emjohn    schedule 21.02.2013
comment
Это делает страницу, подвергшуюся перезаписи, недоступной. - person Nikita; 22.02.2013
comment
Извините, а какова конечная цель? Вы хотите, чтобы пользователи, которые переходят на examplesite.com/about, обслуживались examplesite.com/folder/about.cshtml? - person emjohn; 22.02.2013
comment
Да, хотя я хотел бы иметь постоянный URL-адрес, поэтому examplesite.com/folder/about.cshtml никогда не должен отображаться на панели URL-адресов таким образом. - person Nikita; 23.02.2013