【问题标题】:How do you see the client-side URL in ColdFusion?您如何看待 ColdFusion 中的客户端 URL?
【发布时间】:2023-04-03 14:18:02
【问题描述】:

假设在 ColdFusion 网站上,用户导航到 http://www.example.com/sub1/

服务器端代码通常用于告诉您用户所在的 URL,如下所示: http://#cgi.server_name##cgi.script_name#?#cgi.query_string#

但是,“cgi.script_name”自动包含该文件夹的默认 cfm 文件 - 例如,该代码在解析和扩展时将显示“http://www.example.com/sub1/index.cfm

因此,无论用户访问的是 sub1/index.cfm 还是 sub1/,“cgi.script_name”变量都将包含该“index.cfm”。

问题是,如何确定用户实际访问的是哪个 URL?这个问题主要是出于搜索引擎优化的目的——通常最好将 301 重定向“/index.cfm”到“/”以确保任何内容只有一个 URL——因为这主要是为了蜘蛛的利益,所以 JavaScript 不是在这种情况下不是合适的解决方案。另外,假设一个人无权访问 isapi_rewrite 或 mod_rewrite - 问题是如何在 ColdFusion 中实现这一点,具体来说。

【问题讨论】:

    标签: url coldfusion cgi


    【解决方案1】:

    如果您能够安装 ISAPI_rewrite(假设您在 IIS 上)-http://www.helicontech.com/isapi_rewrite/

    它将变量 x-rewrite-url 插入到 GetHttpRequestData() 结果结构中,该结构将具有 / 或 /index.cfm,具体取决于访问的 URL。

    马丁

    【讨论】:

      【解决方案2】:

      我认为这是可能的。

      使用GetHttpRequestData,您将可以访问所有 HTTP 标头。

      然后其中的GET 标头应该告诉您浏览器正在请求什么文件。

      试试

      <cfdump var="#GetHttpRequestData()#"> 
      

      查看您可以使用的确切内容。

      注意 - 我没有 Coldfusion 可以验证这一点。

      编辑:经过更多研究,GetHttpRequestData 似乎不包含GET 标头。所以这个方法可能行不通。

      我确信有办法 - 尝试转储 CGI 范围,看看你有什么。

      【讨论】:

      • 不,似乎不可能使用纯 CF 解决方案。 CGI 范围和 getHttpRequestData() 都没有客户端 URL 字符串。
      【解决方案3】:

      我想这是不可能的。

      如果客户端请求“GET /”,Web 服务器将在调用 ColdFusion 之前将其转换为“GET /{whatever-default-file-exists-fist}”。 (这对于让 Web 服务器知道必须首先调用 ColdFusion 是必要的!)

      从 ColdFusion(或任何应用程序服务器)的角度来看,客户端请求“GET /index.cfm”,这就是您在 #CGI# 中看到的内容。

      正如您自己指出的那样,可以通过使用 URL 重写工具来区分。由于您专门排除了该路径,因此我只能说您在这里不走运。

      【讨论】:

        【解决方案4】:

        我认为这在 CF 中是不可能的。据我了解,网络服务器(Apache、IIS 等)确定要显示的默认页面,并从 CF 请求它。因此,CF 并不知道实际调用的页面是什么。

        Sergii 是正确的,您可以使用 URL 重写来执行此操作。如果这对您不可用,您可以使用特定页面在默认页面列表中具有优先权这一事实。

        假设 default.htm 是默认页面列表中的第一页。编写一个自动转发到 index.cfm(或其他)的通用 default.htm。如果您可以调整默认列表,您可以让 CF 执行 301 重定向。如果没有,您可以在 HTML 文件中执行元刷新、JS 重定向或类似操作。

        【讨论】:

          【解决方案5】:

          不确定仅使用 CF 是否可行,但您可以使用网络服务器的 URL 重写来解决问题 -- 如果您正在使用它们,当然

          对于 Apache,它可以是这样的。说,我们正在使用以下 mod_rewrite 规则:

          重写规则 ^page/([0-9]+)/?$ index.cfm?page=$1&noindex=yes [L]

          现在当我们尝试访问 URL http://website.com/page/10/ CGI 显示:

          QUERY_STRING page=10&noindex=yes

          看到这个想法了吗?认为使用 IIS 时同样的事情是可能的。

          希望这会有所帮助。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2021-09-03
            • 1970-01-01
            • 2012-04-24
            相关资源
            最近更新 更多