Coldfusion - 避免特定文件的 IIS 404.0 错误并改为手动路由
Coldfusion - Avoid IIS 404.0 error for specific files and do manual routing instead
我正在使用 coldfusion 10 和 iis 7.5 并尝试为我的项目创建自定义路由以避免使用查询字符串。
例如下面的URL:
www.myTestWebsite.com/subfolder1/subfolder2/
应该从存在于根文件夹中的 router.cfm 文件传递,然后根据网站域后的字符串(在本例中为 /subfolder1/subfolder2/),coldfusion 将决定要显示的内容和怎么样。
除了一件事,我设法使一切正常。如果 index.cfm(或 .html,或任何默认文件)在 /subfolder1/subfolder2/ 路径中不存在,IIS 将显示 404.0 错误。但是,如果创建文件夹结构并在其中添加一个空 index.cfm 文件,路由将按预期工作,忽略该空 index.cfm 并根据我已实现的逻辑继续。
有没有办法(通过 CF Administrator、IIS、htaccess 或任何其他方式)避免检查该文件是否存在并抛出 404.0 而允许我通过我的 route.cfm 来处理它?
您可以使用自定义 ColdFusion servlet 映射来执行此操作。以下信息来自 Taffy ColdFusion REST API 框架文档。
http://docs.taffy.io/3.1.0#404-when-your-api-is-in-a-subdirectory
在您的 web.xml 中,您需要添加一个额外的 servlet 映射:
<servlet-mapping>
<servlet-name>CFMLServlet</servlet-name>
<url-pattern>/api/index.cfm/*</url-pattern>
</servlet-mapping>
这是因为 Tomcat 不支持在其映射中使用两个通配符。您会注意到,在 Tomcat 中安装 ACF 或 Lucee,您会得到一个 web.xml,其映射具有 index.cfm/* 的 url 模式,但不幸的是,由于此限制,您不能将其更改为 /index.cfm/.
在上面的 xml 中,您可以看到我只有 1 个通配符,但为了补偿,我指定了 index.cfm 的整个路径,因此只需要 1 个。 (请注意,我使用了 /api/index.cfm,因为它与我的 /api/index.cfm/myResource 的 404 示例相匹配......你的应该与你的 index.cfm 的位置相匹配)。 =12=]
我在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>
我正在使用 coldfusion 10 和 iis 7.5 并尝试为我的项目创建自定义路由以避免使用查询字符串。
例如下面的URL:
www.myTestWebsite.com/subfolder1/subfolder2/
应该从存在于根文件夹中的 router.cfm 文件传递,然后根据网站域后的字符串(在本例中为 /subfolder1/subfolder2/),coldfusion 将决定要显示的内容和怎么样。
除了一件事,我设法使一切正常。如果 index.cfm(或 .html,或任何默认文件)在 /subfolder1/subfolder2/ 路径中不存在,IIS 将显示 404.0 错误。但是,如果创建文件夹结构并在其中添加一个空 index.cfm 文件,路由将按预期工作,忽略该空 index.cfm 并根据我已实现的逻辑继续。
有没有办法(通过 CF Administrator、IIS、htaccess 或任何其他方式)避免检查该文件是否存在并抛出 404.0 而允许我通过我的 route.cfm 来处理它?
您可以使用自定义 ColdFusion servlet 映射来执行此操作。以下信息来自 Taffy ColdFusion REST API 框架文档。
http://docs.taffy.io/3.1.0#404-when-your-api-is-in-a-subdirectory
在您的 web.xml 中,您需要添加一个额外的 servlet 映射:
<servlet-mapping>
<servlet-name>CFMLServlet</servlet-name>
<url-pattern>/api/index.cfm/*</url-pattern>
</servlet-mapping>
这是因为 Tomcat 不支持在其映射中使用两个通配符。您会注意到,在 Tomcat 中安装 ACF 或 Lucee,您会得到一个 web.xml,其映射具有 index.cfm/* 的 url 模式,但不幸的是,由于此限制,您不能将其更改为 /index.cfm/.
在上面的 xml 中,您可以看到我只有 1 个通配符,但为了补偿,我指定了 index.cfm 的整个路径,因此只需要 1 个。 (请注意,我使用了 /api/index.cfm,因为它与我的 /api/index.cfm/myResource 的 404 示例相匹配......你的应该与你的 index.cfm 的位置相匹配)。 =12=]
我在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>