我有一个 Web 项目,安装了 UrlRewriter.NET,并且在本地 .NET 3.5 上运行良好。
然后,我将其升级到 .NET 4.0,并且它继续在我的本地 PC 上的 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,但仍然遇到错误,但它看起来更像是我的配置错误,而不是服务器支持错误。我又提出了一个问题ManagedFusion Url Rewriting not working .
希望这能解决我的问题。
最佳答案
您使用的是什么类型的应用程序池? UrlRewrite 不适用于 .NET 4.0 的经典应用程序池,您的应用程序池必须仅配置为 .NET 4.0 管道模式。
关于asp.net - UrlRewriter.NET 与 .NET 4.0 无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4882329/