程序问答   发布时间:2022-06-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了ColdFusion 10 + IIS:作为CFM文件的不存在的URL。执行404页面后检索原始URL大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决ColdFusion 10 + IIS:作为CFM文件的不存在的URL。执行404页面后检索原始URL?

开发过程中遇到ColdFusion 10 + IIS:作为CFM文件的不存在的URL。执行404页面后检索原始URL的问题如何解决?下面主要结合日常开发的经验,给出你关于ColdFusion 10 + IIS:作为CFM文件的不存在的URL。执行404页面后检索原始URL的解决方法建议,希望对你解决ColdFusion 10 + IIS:作为CFM文件的不存在的URL。执行404页面后检索原始URL有所启发或帮助;

我认为这是Coldfusion连接器的错误。我会将错误报告发布到Adobe(https://bugbase.adobe.com/)。我确实有解决方法。我有同样的问题,但是我使用IIRF(离子IIS重定向器- http://iirf.codeplex.com/),并且我找到了一种使用该方法避免该错误的方法:

  1. 在IIS / Coldfusion中删除任何以前的404文件配置
  2. 按照其安装说明,正常安装IIRF。
  3. 在IirfGlobal.ini文件(通常位于C:\ windows \ System32 \ inetsrv \ IIRF中)中,添加以下行:
    RewriteFilterPriority HIGH
    

这样一来,IIRF甚至可以在击中ColdFusion / tomcat之前处理404请求。

  1. 在特定于站点的Iirf.ini中(通常是在Web文件的根文件夹中创建一个-有关详细信息,请参见IIRF文档),添加以下规则:
    RewriteCond %{SCRIPT_TRANSLATED} !-f
    

    RewriteCond %{SCRIPT_TRANSLATED} !-d RewriteRule ^(.+)$ page_to_redirect_to.cfm?404;$1 [L]

这会将所有不存在的文件/目录重定向到page_to_redirect_to.cfm,并像平常一样添加404查询字符串。

  1. 进入IIS管理器并选择配置为使用IIRF的服务器或网站,然后进入ISAPI筛选器部分。单击“查看排序列表”,然后将IIRF过滤器移到顶部。

刚刚向Adobe发布了一个错误。参见https://bugbase.adobe.com/index.cfm?event=bug&id=3630245

希望能有所帮助。

解决方法

我们的服务器设置如下:

  • Windows 2012 R2
  • 企业Coldfusion 10
  • IIS,使用自定义404页面进行配置(在服务器上执行)

自定义404页(CFM文件)处理缺失的URL,并对照数据库中的自定义URL检查它们。如果找到匹配项,它将显示相关数据。当自定义URL映射到不存在的CFM文件时,就会发生此问题。例如。

/home/map.cfm(不是真实文件或目录)

现在,当用户请求此URL时,服务器将看到它是CFM文件,并将其正确地传递给ColdFusion(通过ISAPI重定向)。tomcat看到此文件实际上不存在,并返回404。IIS看到此404消息并执行自定义错误页面(/errors/404.cfm)。

产生的CGI变量实际上并不使我们能够检索原始URL(以将其映射到数据库中的虚拟URL),通常将其作为CGI.QUERY_StriNG变量的一部分提供。相反,QUERY_StriNG变量在“
jakarta”目录中包含“ isapi_rewrite.dll”文件的路径。

tomcat返回所述页面的404错误之后,有什么方法可以保留原始请求的URL(CFM文件的URL)?

解决方案,由我自己设计,灵感来自Thomas Gorgolione

可以怀疑,问题始终归结为将请求转发到ISAPI_REDIRECT模块,即使该文件不存在。

正如Thomas所建议的那样,一种优雅的解决方案是在将其传递给ISAPI_REDIRECT模块之前,利用重写检查文件/目录是否确实存在。

尽管Thomas提出了可以解决问题的软件,但我无法将其安装在64位Windows 2012
R2计算机上。但是,我设法回过头来利用IIS8(可能还有更早版本)附带的URL Rewrite模块。

请参阅下面提供解决方案的web.config条目。

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
        <httpErrors>
            <remove statusCode="404" subStatusCode="-1" />
        </httpErrors>
        <rewrite>
            <rules>
                <rule name="404 http">
                    <match url="(.*)" />
                    <conditions>
                        <add input="{requEST_URI}" pattern="CFFileServlet/(.*)" negate="true" />
                        <add input="{requEST_FILename}" matchType="IsFile" negate="true" />
                        <add input="{requEST_FILename}" matchType="IsDirectory" negate="true" />
                        <add input="{SERVER_PORT_SECURE}" pattern="0" />
                    </conditions>
                    <action type="Rewrite" url="/404.cfm?404;http://{http_HOST}:{SERVER_PORT}{requEST_URI}" />
                </rule>
                <rule name="404 httpS">
                    <match url="(.*)" />
                    <conditions>
                        <add input="{requEST_URI}" pattern="CFFileServlet/(.*)" negate="true" />
                        <add input="{requEST_FILename}" matchType="IsFile" negate="true" />
                        <add input="{requEST_FILename}" matchType="IsDirectory" negate="true" />
                        <add input="{SERVER_PORT_SECURE}" pattern="1" />
                    </conditions>
                    <action type="Rewrite" url="/404.cfm?404;https://{http_HOST}:{SERVER_PORT}{requEST_URI}" />
                </rule>
            </rules>
        </rewrite>
    </system.webServer>
</configuration>

上面的配置文件同时虑了httphttpS请求。它还将虑CFFileServlet目录,ColdFusion使用该目录托管临时图像和资产。如果URL以该目录开头,它将作为常规请求传递。

感谢大家的投入。

大佬总结

以上是大佬教程为你收集整理的ColdFusion 10 + IIS:作为CFM文件的不存在的URL。执行404页面后检索原始URL全部内容,希望文章能够帮你解决ColdFusion 10 + IIS:作为CFM文件的不存在的URL。执行404页面后检索原始URL所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。