为啥 url 重写不起作用?
Posted
技术标签:
【中文标题】为啥 url 重写不起作用?【英文标题】:Why doesn't url rewrite work?为什么 url 重写不起作用? 【发布时间】:2010-09-24 02:39:34 【问题描述】:在 asp.net 3.5 中,我正在重写 url
http://www.abc.com/archive/1108/harpersdecember
到下面
http://www.abc.com/article.aspx?docId=78
我正在使用此代码来执行此操作:
Context.RewritePath("/article.aspx?docId=78");
它在本地运行良好,但是当我上传到远程 Web 服务器时,我在尝试引用上述页面时收到 404。有什么建议为什么它可以在本地工作但不能在远程工作?
【问题讨论】:
能否提及 IIS 版本(本地和远程)及其运行模式,如果是 IIS7(集成或经典)? 【参考方案1】:您可能需要在远程服务器上的 IIS 中创建通配符映射,以便所有请求都由 ASP.Net 处理。如果你不这样做,任何最后没有 .ASPX 的 URL 都不会通过你的 URL 重写代码运行。
Scott Guthrie's blog 对此有很好的解释(以及您可能使用它的其他原因)。
【讨论】:
【参考方案2】:不是“可能”——您肯定需要创建通配符映射。 Visual Studio 使用 cassini Web 服务器,它基本上通过 .net 传递所有请求。 IIS 仅将特定的映射请求(默认为 .aspx、.asmx 等)转发到 .net - 在 asp.net 中重写 URL 需要添加新映射以首先将请求发送到 asp.net
【讨论】:
【参考方案3】:在我看来,生产服务器没有默认的 aspx 页面,即:default.aspx。如果是,它会将请求重新路由到您的处理程序。
验证这一点的简单方法是创建一个目录并在其中放置一个 default.aspx 文件并尝试仅使用目录名称来请求它,即:server.com/newdir/ 如果这给你一个 404,那么你肯定知道。
【讨论】:
以上是关于为啥 url 重写不起作用?的主要内容,如果未能解决你的问题,请参考以下文章