【问题标题】:How to get Umbraco to handle requests for non .aspx files (IIS integrated pipeline mode)?如何让 Umbraco 处理对非 .aspx 文件的请求(IIS 集成管道模式)?
【发布时间】: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://stackoverflow.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 文件的请求时我缺少什么?

【问题讨论】:

    标签: iis-7 umbraco http-status-code-301 integrated-pipeline-mode


    【解决方案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 的那部分。
    猜你喜欢
    • 1970-01-01
    • 2010-10-10
    • 2010-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多