为啥 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 重写不起作用?的主要内容,如果未能解决你的问题,请参考以下文章

URL 重写在 IIS 7 上不起作用

使用三个段时重写 URL 不起作用

.htaccess:使用参数重写 url 不起作用

URL 重写在 Nginx 中不起作用

迁移到新主机后,Joomla 站点 URL 重写不起作用

为啥输入类型=“url”验证不起作用