Iis 7 如何让Umbraco处理非.aspx文件的请求(IIS集成管道模式)?

Iis 7 如何让Umbraco处理非.aspx文件的请求(IIS集成管道模式)?,iis-7,umbraco,http-status-code-301,integrated-pipeline-mode,Iis 7,Umbraco,Http Status Code 301,Integrated Pipeline Mode,我在试着让Umbraco的工作符合我的喜好 我的目标是能够将旧URL(从另一个CMS)映射到新的Umbraco URL。在我的特定情况下,旧站点是基于PHP的,因此使用.PHP文件扩展名(http://example.net/test.php ->)-但它可以是任何非.aspx扩展名(asp、png等)。问题是Umbraco没有处理对.php文件的请求。它适用于.aspx和目录(无扩展URL) 我试过各种方法来让它发挥作用。在进一步讨论之前,我应该注意到应用程序池处于集成模式和.NET 4.0

我在试着让Umbraco的工作符合我的喜好

我的目标是能够将旧URL(从另一个CMS)映射到新的Umbraco URL。在我的特定情况下,旧站点是基于PHP的,因此使用.PHP文件扩展名(http://example.net/test.php ->)-但它可以是任何非.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头。这只是一个大的搜索引擎优化“不不”

然后,我尝试显式地为.php文件创建一个HTTP处理程序模块。我成功地获得了System.Web.UI.PageHandlerFactory模块来处理对.php文件的请求。但这不会调用Umbraco中的任何NotFoundHandler

据我所知,IIS7中的集成管道,所有注册的模块都应该尝试处理该请求(http://stackoverflow.com/questions/3765317/how-to-catch-non-aspx-files-with-a-http-module). 但也许有人能在这个问题上启发我

其他人在使用此配置时也遇到了困难:


让Umbraco在集成管道模式下处理非.aspx文件的请求时,我缺少了什么?

我对Umbraco不熟悉,但相信这就是您想要的


当然,您必须添加自己的重写规则。。。所以这只会让你半途而废。

我对翁布拉科不熟悉,但相信这就是你想要的


当然,您必须添加自己的重写规则。。。因此,这只能让您半途而废。

如果您已经在集成管道模式下运行,那么包含的UrlRewriting.net模块应该自动接收请求。 只需添加:

<add name="phptoaspx"
     virtualUrl="^~/(.*).php"
     rewriteUrlParameter="ExcludeFromClientQueryString"
     destinationUrl="/$1.aspx"
     ignoreCase="true" />

到您的/config/UrlRewriting.config文件,所有这些都应该很好


另外,您应该而不是使用自定义错误处理程序来处理SEO 301/302'ing内容。就可维护性而言,这可能是一个非常令人头痛的问题——请相信我,我在初级.NET开发人员时曾经尝试过这一点

如果您已经在集成管道模式下运行,则包含的UrlRewriting.net模块应自动拾取请求。 只需添加:

<add name="phptoaspx"
     virtualUrl="^~/(.*).php"
     rewriteUrlParameter="ExcludeFromClientQueryString"
     destinationUrl="/$1.aspx"
     ignoreCase="true" />

到您的/config/UrlRewriting.config文件,所有这些都应该很好


另外,您应该而不是使用自定义错误处理程序来处理SEO 301/302'ing内容。就可维护性而言,这可能是一个非常令人头痛的问题——请相信我,我在初级.NET开发人员时曾经尝试过这一点

谢谢你的回答!自定义重写已包含在Umbraco中,我在调用Umbraco的该部分时遇到问题。谢谢您的回答!自定义重写已包含在Umbraco中,我在调用Umbraco的该部分时遇到问题。谢谢!我将尝试这个简单的修复。我们正在使用InfoCaster的301 URL跟踪器包来处理301重定向-别担心:-)它适用于自定义404页面,但不适用于301 URL跟踪器。由于重写,传递给URL跟踪器的URL不是实际的旧URL(test.php作为test.aspx传递)。差不多了。非常感谢你的回答!我自己也没用过301追踪器。我可以问一下吗?您的URL(.php)是否与新的.aspx匹配(例如test-this.php用于测试this.aspx?)否。在这种特定情况下,旧URL的格式为index.php?test,新URL为test-this.aspx。因此,没有简单的URL重写;-)谢谢我将尝试这个简单的修复。我们正在使用InfoCaster的301 URL跟踪器包来处理301重定向-别担心:-)它适用于自定义404页面,但不适用于301 URL跟踪器。由于重写,传递给URL跟踪器的URL不是实际的旧URL(test.php作为test.aspx传递)。差不多了。非常感谢你的回答!我自己也没用过301追踪器。我可以问一下吗?您的URL(.php)是否与新的.aspx匹配(例如test-this.php用于测试this.aspx?)否。在这种特定情况下,旧URL的格式为index.php?test,新URL为test-this.aspx。因此,没有简单的URL重写;-)