UrlRewriter.NET с .NET 4.0 не работает - PullRequest
2 голосов
/ 03 февраля 2011

У меня есть веб-проект, в котором установлен UrlRewriter.NET и он отлично работает в .NET 3.5 локально.

Затем я обновил его до .NET 4.0, и это продолжало работать на моем локальном ПК в Visual Studio 2010.

Когда я переместил этот проект .NET 4.0 на свой сервер, перезапись URL перестала работать.

Вот мой web.config (сокращенно для читабельности здесь)

<?xml version="1.0"?>
<configuration> 
   <configSections>
      <section name="rewriter" requirePermission="false" type="Intelligencia.UrlRewriter.Configuration.RewriterConfigurationSectionHandler, Intelligencia.UrlRewriter"/>
   </configSections>

   <system.web>

   </system.web>
   <rewriter>
      <rewrite url="~/Neat-Url" to="~/Ugly-Url.aspx?id=1"/>
   </rewriter>
   <system.webServer>
       <validation validateIntegratedModeConfiguration="false"/>
       <modules runAllManagedModulesForAllRequests="true">
           <add name="UrlRewriter" type="Intelligencia.UrlRewriter.RewriterHttpModule"/>
       </modules>
    </system.webServer>
</configuration>

При установке на сервер он просто возвращает 404.

Интересное открытие. Если я создаю каталог с именем / Neat-Url, перезапись URL-адреса снова начинает работать и перенаправляет на /Ugly-Url.aspx?id=1

.

Примечание. Да, я понимаю, что в .NET 4.0 есть своя собственная перезапись URL, а также у меня есть существующий код, который работает с UrlRewriter.

Итак, я обречен, потому что это проблема конфигурации сервера, или я могу обойти ее?

[ОБНОВЛЕНИЕ]: Хорошо, я определил кое-что еще. Редактор URL не будет работать, если файл или каталог на самом деле не существуют.

Например. Если я хочу перенаправить / Directory1 в /Directory1.aspx, / Directory1 должен существовать, тогда все будет работать нормально.

Если я хочу перенаправить /File1.aspx в /File2.aspx, это также работает, но File1.aspx должен существовать в файловой системе.

В противном случае я продолжаю получать 404. Это кажется разрешимым через .NET и связано с web.config, так как вызов File1.aspx передается в среду выполнения и получает asp.net 404. Просто вызывая каталог получает веб-хостинг 404.

[ОБНОВЛЕНИЕ 2]: я удалил

<httpModules> 

раздел из моего веб-конфига, затем добавил

<identity impersonate="false"/>

Затем также изменил validateIntegratedModeConfiguration = "true". Все та же проблема, но, по крайней мере, теперь она действует в интегрированном режиме.

[ОБНОВЛЕНИЕ 3]: Сейчас я пробую ManagedFusion, но все еще сталкиваюсь с ошибками, но это скорее ошибка конфигурации, а не поддержка сервера. Я поднял еще один вопрос Перезапись URL ManagedFusion не работает .

Надеюсь, это решит мои проблемы.

Ответы [ 7 ]

3 голосов
/ 03 февраля 2011

Какой пул приложений вы используете? UrlRewrite не работает с Классическим пулом приложений для .NET 4.0, ваш пул приложений должен быть настроен только для режима конвейера .NET 4.0.

1 голос
/ 04 февраля 2011

изменить модуль перезаписи на Url Rewrite Module . У меня была такая же проблема с Годадди, поэтому изменение решило мою проблему.

1 голос
/ 03 февраля 2011

Вы можете использовать альтернативные программы перезаписи, которые работают с .net 4.0 и GoDaddy. Такие как Managed Fusion URL Rewriter и обратный прокси.

Я предполагаю, что некоторые разрешения, связанные с конфигурацией среднего доверия GoDaddys, вызывают несоответствия, которые вы видите.

0 голосов
/ 21 октября 2016

На самом деле то, что вы хотите, это.Убедитесь, что для этого параметра установлено значение false, поскольку в противном случае после перезаписи URL-адреса перезаписывает URL-адрес, приложение .NET может перенаправить его обратно.

   <system.webServer>
       <modules runAllManagedModulesForAllRequests="true">
0 голосов
/ 25 июня 2015

@ gilly3 был правильный ответ! Я только что проверил это на моей собственной системе (IIS 8, .NET 4.5 framework)

Первоначально у меня было это в моем web.config, который работал для .NET Framework 3.5 и ниже

<system.webServer>
    <validation validateIntegratedModeConfiguration="false" />
    <modules runAllManagedModulesForAllRequests="true" />
</system.webServer>

так что я изменил его ниже, и он работает!

<system.webServer>
    <validation validateIntegratedModeConfiguration="false" />
    <modules runAllManagedModulesForAllRequests="true">
       <add name="UrlRewriter" type="Intelligencia.UrlRewriter.RewriterHttpModule, Intelligencia.UrlRewriter" />
    </modules>
</system.webServer>
0 голосов
/ 26 октября 2011

Этот ответ заставил UrlRewriter работать на моем аккаунте GoDaddy:

Можно ли настроить Intelligencia.UrlRewriter для работы в IIS7?

Решение состоит в том, чтобы добавить это в ваш web.config:

<system.webServer>
  <validation validateIntegratedModeConfiguration="false" />
  <modules runAllManagedModulesForAllRequests="true">
    <add name="UrlRewriter" 
      type="Intelligencia.UrlRewriter.RewriterHttpModule, Intelligencia.UrlRewriter" />
  </modules>
</system.webServer>
0 голосов
/ 04 февраля 2011

Кажется, что URL Rewriter.NET не будет играть хорошо.

Скорее всего, это связано с тем, что мое приложение работает в виртуальном каталоге.

Мне удалосьзаставить работать переписывание URL-адресов Microsoft (не Url Routing, поскольку это также имеет проблемы с виртуальными каталогами).

Так вот, что я буду использовать.

Я думаю, будет справедливо сказать, что URLRewriter.NETбыл день.

...