ASP.NET / IIS7 Url Rewrite карты не работают - PullRequest
5 голосов
/ 13 ноября 2010

Я следовал инструкциям Изучите веб-страницу IIS для добавления статических перенаправлений с картой перезаписи для моего приложения asp.net.

Ниже приведена конфигурация:

<rule name="Redirect rule1 for Information" stopProcessing="true">
    <match url=".*" />
    <conditions logicalGrouping="MatchAll" trackAllCaptures="false">
        <add input="{Information:{REQUEST_URI}}" pattern="(.+)" />
    </conditions>
    <action type="Rewrite" url="{C:1}" appendQueryString="true" />
</rule>

И

<rewriteMaps>
    <rewriteMap name="Information">
        <add key="/Information/CorporateSales.aspx"
             value="/KB/Information/CorporateSales" />
        <add key="/Information/ComputerRepair.aspx"
             value="/KB/Information/ComputerRepair" />
    </rewriteMap>
</rewriteMaps>

Это было даже изначально создано мастером в диспетчере IIS для использования карт перезаписи.

Таким образом, идея заключается в том, что /Information/CorporateSales.aspx -> /KB/Information/CorporateSalesс редиректом 301 (MOVED PERMANENTLY).

Однако я только загружаю исходную страницу aspx (которую мы удалим позже).Я даже удалил файл , если он по умолчанию использовался для существующего ресурса, и с этим я просто получаю простое 404 без перенаправления.

У кого-нибудь есть идея?

Позвольте мне кое-что уточнить:

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

Ответы [ 5 ]

7 голосов
/ 26 февраля 2014

Эта статья http://www.iis.net/learn/extensions/url-rewrite-module/using-rewrite-maps-in-url-rewrite-module и код ниже работал для меня.

<rewrite>
    <rules>
        <rule name="Redirect rule1 for RedirectURLs">
            <match url=".*" />
            <conditions>
                <add input="{RedirectURLs:{REQUEST_URI}}" pattern="(.+)" />
            </conditions>
            <action type="Redirect" url="{C:1}" appendQueryString="false" />
        </rule>
    </rules>
    <rewriteMaps>
        <rewriteMap name="RedirectURLs">
            <add key="/privacy.php" value="/privacy" />
        </rewriteMap>
    </rewriteMaps>
</rewrite>
2 голосов
/ 02 мая 2011

У меня была похожая проблема, и я нашел этот вопрос. Это заняло у меня немного времени, но я смог понять, в чем проблема.

Моя карта перезаписи содержала URL-адреса "/Default2.aspx" и "/Dashboard.aspx".

Когда я переходил на Default2.aspx, я получал 404, а не перенаправлялся на Dashboard.aspx, как ожидалось.

Проблема, которую я обнаружил, заключалась в том, что на моем компьютере приложение работало в подкаталоге. Пути rewriteMap будут работать, только если я использую полный путь (включая папку приложения), например, "/TestSite/Default2.aspx".

Так что я мог бы добавить дубликаты записей в мою rewriteMap для учета каталогов приложений на компьютерах разработчиков, но это казалось грязным. Я посмотрел на другие правила перезаписи в приложении, у которых не было этой проблемы, и заметил, что они используют переменную {REQUEST_FILENAME}, а не {REQUEST_URI}. Поэтому я переключил правило на использование {REQUEST_FILENAME} и удалил первую косую черту из URL в моей rewriteMap.

0 голосов
/ 30 января 2012

Ранее у меня была такая же проблема, как вы описали.

Не могли бы вы обновить свой код до

<match url="(.*)" />

и я надеюсь, что вы знаете,

 <add input="{Information:{REQUEST_URI}}" pattern="(.+)" />

это условие будет захватывать полный URL-адрес, кроме домена. пример по этому URL: www.example.com/Information/CorporateSales.aspx это будет проверять соответствие состояния Information/CorporateSales.aspx на rewriteMap

и наверняка он не будет совпадать с этим URL

www.example.com/old/Information/CorporateSales.aspx

0 голосов
/ 13 ноября 2010

У вас установлена ​​перезапись URL как часть IIS7 / 7.5? Это не установлено по умолчанию. Кроме того, убедитесь, что для пула приложений установлен режим интегрированного трубопровода, а не классический.

Редактировать

Из этого:

http://learn.iis.net/page.aspx/469/using-rewrite-maps-in-url-rewrite-module/

Это единственное, что я вижу, что вы делаете, это добавление атрибута stopProcessing. Вы пытались удалить это?

0 голосов
/ 13 ноября 2010

Сбрасывали ли вы пул приложений и сайт iis?

В некоторых случаях для распространения по всему миру может потребоваться до 72 часов.

...