Вопрос о синтаксисе правила перезаписи URL - PullRequest
2 голосов
/ 07 сентября 2011

Я только что обновился до VS2010 / IIS 7.5 / URL Rewrite 2.0.То, что я хочу сделать, довольно легко, я себе представляю, но я очень устал от попыток заставить это работать самостоятельно.

Я просто хочу очистить URL-адреса, в результате чего http://example.com/abc-def.aspx становится http://example.com/abc-def/,, эффективно удаляя расширение .aspx и добавляя косую черту.

Я сделал это с помощью:

<rule name="Trim aspx for directory URLs">
    <match url="(.+)\.aspx$" />
    <action type="Redirect" redirectType="Permanent" url="{R:1}/" />
</rule>

Это работает простоотлично и перенаправляет по назначению, но не открывает страницу, поэтому я подумал, что мне нужно объединить это с правилом перезаписи, чтобы он разрешил чистый URL-адрес к соответствующей странице .aspx.

У меня естьпопытался сделать это, используя:

<rule name="Add aspx extension back internally">
    <match url="^http://example\.com/(.+)/$" ignoreCase="true" />
    <conditions>
        <add input="{URL}" matchType="IsDirectory" negate="true" />
        <add input="{URL}" pattern=".+/externals/.+" negate="true" />
    </conditions>
    <action type="Rewrite" url="{R:1}.aspx" />
</rule>

Правило перенаправления работает, но кажется, что внутреннее правило перезаписи не работает, потому что страница не открывается.Что я делаю не так?

1 Ответ

1 голос
/ 07 сентября 2011

Не совсем уверен, есть ли способ с URL Rewrite 2.0 сделать оба:

  1. Удалите расширение .aspx и добавьте завершающий слеш / при поступлении запросов.
  2. Внутренне добавьте расширение .aspx обратно, чтобы загружать правильные страницы вместо получения 404.

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

Это позволило мне потребовать только:

<rule name="Add aspx extension back internally" 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" />
    </conditions>
    <action type="Rewrite" url="{R:1}.aspx" />
</rule>

<rule name="Add trailing slash" stopProcessing="false">
    <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="favicon\.ico" ignoreCase="true" negate="true" />
        <add input="{URL}" pattern="\.axd" ignoreCase="true" negate="true" />
    </conditions>
    <action type="Redirect" url="{R:1}/" />
</rule>
...