如何在ColdFusion中看到客户端URL?

时间:2009-02-23 21:05:50

标签: url coldfusion cgi

让我们说,在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”var都将包含“index.cfm”。

问题是,如何确定用户实际访问的URL?这个问题主要是针对搜索引擎优化的目的 - 301通常更倾向于将“/index.cfm”重定向到“/”以确保任何一条内容只有一个网址 - 因为这主要是为了蜘蛛的利益,javascript isn在这种情况下是一个合适的解决方案。另外,假设一个人无权访问isapi_rewrite或mod_rewrite-问题是如何在ColdFusion中实现这一点,特别是。

5 个答案:

答案 0 :(得分:6)

我想这是不可能的。

如果客户端请求“GET /”,则在ColdFusion被调用之前,Web服务器将其翻译为“GET / {whatever-default-file-exists-fist}”。 (这对于Web服务器来说必须知道必须首先调用ColdFusion!)

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

正如您自己指出的那样,可以通过使用URL重写工具进行区分。既然你明确地排除了那条道路,我只能说你在这里运气不好。

答案 1 :(得分:3)

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

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

  

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

现在,当我们尝试访问网址 http://website.com/page/10/ 时,CGI会显示:

  

QUERY_STRING page = 10& noindex = yes

看到这个想法?使用IIS时可以想到同样的事情。

希望这有帮助。

答案 2 :(得分:2)

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

Sergii是正确的,您可以使用URL重写来执行此操作。如果您无法使用,则可以使用特定页面在默认页面列表中优先的事实。

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

答案 3 :(得分:1)

我认为这是可能的。

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

然后其中的GET标题应该告诉您浏览器请求的文件。

尝试

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

准确了解您可以使用的内容。

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

修改:经过更多研究后,GetHttpRequestData似乎不包含GET标题。所以这种方法可能不起作用。

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

答案 4 :(得分:0)

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

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

马丁