2013-02-21 3 views
3

я боролся со следующим в течение некоторого времени теперь:IIS url rewrite | Как удалить каталог и расширение?

По умолчанию URL:

examplesite.com/folder/about.cshtml 

Желаемая URL:

examplesite.com/about 

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

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

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

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

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

+2

IIRC with Razor вы можете оставить '.cshtml' в любом случае - http://www.asp.net/web-pages/tutorials/working-with-pages/creating-readable-urls-in-aspnet-web- pages-sites – Lloyd

ответ

4

Я не уверен, что я полностью понимаю ваши потребности, но вот что-то, что, по крайней мере близко. Он удаляет первую папку и расширение файла (так 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> 

Update:

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

<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.

+0

Это делает страницу, выполняемую переписыванием, недоступной. – Nikita

+0

Извините, какова цель? Вы хотите, чтобы пользователи переходили на 'examplesite.com/about' и обслуживались' examplesite.com/folder/about.cshtml'? – emjohn

+0

Да, хотя я бы хотел иметь постоянный URL-адрес, поэтому 'examplesite.com/folder/about.cshtml' никогда не должен появляться в urlbar. – Nikita