Coldfusion-避免特定文件的IIS 404.0错误,改为手动路由

Coldfusion-避免特定文件的IIS 404.0错误,改为手动路由,iis,coldfusion,routes,http-status-code-404,coldfusion-10,Iis,Coldfusion,Routes,Http Status Code 404,Coldfusion 10,我正在使用coldfusion 10和iis 7.5,并尝试为我的项目创建一个自定义路由,以避免使用查询字符串 例如,以下URL: www.myTestWebsite.com/subfolder1/subfolder2/ 应该从根文件夹中存在的router.cfm文件传递,然后根据网站域后的字符串(在本例中为/subfolder1/subfolder2/)coldfusion将决定显示什么以及如何显示 除了一件事之外,我设法使一切都顺利。如果/subfolder1/subfolder2/路径中不

我正在使用coldfusion 10和iis 7.5,并尝试为我的项目创建一个自定义路由,以避免使用查询字符串

例如,以下URL:

www.myTestWebsite.com/subfolder1/subfolder2/

应该从根文件夹中存在的router.cfm文件传递,然后根据网站域后的字符串(在本例中为/subfolder1/subfolder2/)coldfusion将决定显示什么以及如何显示

除了一件事之外,我设法使一切都顺利。如果/subfolder1/subfolder2/路径中不存在index.cfm(或.html或任何默认文件),IIS将显示404.0错误。但是,如果创建文件夹结构并在其中添加一个空index.cfm文件,路由将按预期工作,忽略该空index.cfm并按照我实现的逻辑继续


有没有办法(通过CF Administrator、IIS、htaccess或任何其他方式)避免检查该文件是否存在并抛出404.0,而是允许我通过路由处理该文件。cfm?

您可以使用自定义的ColdFusion servlet映射来实现这一点。以下信息来自Taffy ColdFusion REST API框架文档。

在web.xml中,您需要添加一个额外的servlet映射:

<servlet-mapping>
  <servlet-name>CFMLServlet</servlet-name>
  <url-pattern>/api/index.cfm/*</url-pattern>
</servlet-mapping>

CFMLServlet
/api/index.cfm/*
这是因为Tomcat不支持在其映射中使用两个通配符。您会注意到,在Tomcat中安装ACF或Lucee会得到一个web.xml,其映射的url模式为index.cfm/*,但不幸的是,由于这个限制,您无法将其更改为/index.cfm/


在上面的xml中,您可以看到我只有1个通配符,但为了弥补这个不足,我指定了index.cfm的整个路径,因此只需要1。(请注意,我使用/api/index.cfm是因为它与我的404 for/api/index.cfm/myResource的示例相匹配……您的示例应该与index.cfm的位置相匹配)。

我在web.config中使用重写:

<rule name="wvcms" patternSyntax="Wildcard" stopProcessing="true">
    <match url="*" />
    <conditions>
        <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
        <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
    </conditions>
    <action type="Rewrite" url="/route.cfm?cmspath=/{R:1}" />
</rule>


谢谢你的回答,凯文。我应该说清楚,我在这个领域是全新的,所以大多数答案(包括你的答案)在我耳中听起来都很奇怪。我们可以利用聊天功能实时谈论它吗?欢迎回答。我希望这有助于解决你的问题。Stack Exchange站点的目的是培养基于共享、可见和透明社区参与的社区,以帮助海报解决问题。如果您有更多问题,最好将它们公开发布在Stack Overflow上,以便对话和答案可以共享。如果我的答案能解决你的问题,请记住标记为“已接受”。谢谢不幸的是,我没有幸使用servlet映射。我必须在我的web.config中添加以下代码以使我的规范成为可能:注意:这需要安装IIS URL重写扩展()。使用URL重写功能可能是解决此问题的最简单方法。类似的方法很有效。关键是URL重写扩展。