如何让 Umbraco 处理对非 .aspx 文件的请求(IIS 集成管道模式)?
Posted
技术标签:
【中文标题】如何让 Umbraco 处理对非 .aspx 文件的请求(IIS 集成管道模式)?【英文标题】:How to get Umbraco to handle requests for non .aspx files (IIS integrated pipeline mode)? 【发布时间】:2011-06-24 18:21:42 【问题描述】:我正在尝试使用 301 URL Tracker package 让 Umbraco 按我的喜好工作。
我的目标是能够将旧 URL(来自另一个 CMS)映射到新的 Umbraco URL。在我的具体情况下,旧站点是基于 php 的,因此使用 .php 文件扩展名(http://example.net/test.php -> http://example.net/test/) - 但它可以是任何非 .aspx 扩展名(asp、 png 等)。问题是 Umbraco 没有处理对 .php 文件的请求。它适用于 .aspx 和目录(无扩展名 URL)。
我已经尝试了各种方法来让它发挥作用。在继续之前,我应该注意应用程序池处于集成模式和 .NET 4.0。
我通过在 web.config 中定义一个自定义错误来让它工作:
<customErrors defaultRedirect="not-exists.aspx" />
这会触发 Umbraco 配置文件 404handlers.config 中 NotFoundHandlers 中定义的处理程序。但在 301 URL 跟踪器启动并处理 301 重定向之前,会返回 302 Found 标头的副作用。而这只是一个大的 SEO“不不”。
然后我尝试为 .php 文件显式创建 HTTP 处理程序模块。我成功获得了 System.Web.UI.PageHandlerFactory 模块来处理对 .php 文件的请求。但这不会调用 Umbraco 中的任何 NotFoundHandler。
据我了解 IIS 7 中的集成管道,所有注册的模块都应尝试处理请求 (http://***.com/questions/3765317/how-to-catch-non-aspx-files-with- a-http 模块)。但也许有人可以在这个问题上启发我?
其他人在使此配置正常工作时也遇到了困难:http://our.umbraco.org/projects/developer-tools/301-moved-permanently/feedback/7271-when-the-old-pages-are-not-from-umbraco
让 Umbraco 在集成管道模式下处理对非 .aspx 文件的请求时我缺少什么?
【问题讨论】:
【参考方案1】:如果您已经在集成管道模式下运行,那么包含的 UrlRewriting.net 模块应该会自动接收请求。 只需添加:
<add name="phptoaspx"
virtualUrl="^~/(.*).php"
rewriteUrlParameter="ExcludeFromClientQueryString"
destinationUrl="/$1.aspx"
ignoreCase="true" />
到您的 /config/UrlRewriting.config 文件,一切都应该很好。
附:您应该不使用 customError 处理程序来处理 SEO 301/302 内容。就可维护性而言,这可能是一个令人头疼的问题 - 请相信我,我在初级 .NET 开发人员时尝试过一次!
【讨论】:
谢谢!我会尝试这个简单的修复。我们正在使用 InfoCaster 的 301 URL Tracker 包来处理 301 重定向 - 不用担心 :-) 它适用于自定义 404 页面,但不适用于 301 URL 跟踪器。由于重写,传递给 URL Tracker 的 URL 不是实际的旧 URL(test.php 作为 test.aspx 传递)。差不多了。非常感谢答案! 我自己没有使用过 301 追踪器。我可以问一下 - 您的 URL (.php) 是否与新的 .aspx 匹配字符对字符(例如 test-this.php 转到 test-this.aspx?) 没有。在这种特定情况下,旧 URL 的格式是 index.php?test,新 URL 是 test-this.aspx。所以那里没有简单的 URL 重写 ;-)【参考方案2】:我对 Umbraco 不熟悉,但相信这就是您要找的东西http://blogs.iis.net/ruslany/archive/2008/09/30/wildcard-script-mapping-and-iis-7-integrated-pipeline.aspx
当然,您必须添加自己的重写规则...所以这只会让您成功。
【讨论】:
感谢您的回答!自定义重写已经包含在 Umbraco 中,我无法调用 Umbraco 的那部分。以上是关于如何让 Umbraco 处理对非 .aspx 文件的请求(IIS 集成管道模式)?的主要内容,如果未能解决你的问题,请参考以下文章
Umbraco 8 模型生成器无法找到 doctype 生成的文件
如何让 Visual Studio 2010 将文件扩展名识别为 C#/ASPX/C/C++ 文件?