У меня есть веб-проект, в котором установлен 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 не работает .
Надеюсь, это решит мои проблемы.