Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
您如何看待ColdFusion中的客户端URL?_Url_Coldfusion_Cgi - Fatal编程技术网

您如何看待ColdFusion中的客户端URL?

您如何看待ColdFusion中的客户端URL?,url,coldfusion,cgi,Url,Coldfusion,Cgi,比方说,在一个ColdFusion站点上,用户已经导航到该站点 通常用于告诉您用户所在的URL的服务器端代码如下所示: 但是,“cgi.script_name”自动包含该文件夹的默认cfm文件-例如,该代码在解析和展开时将显示给我们“” 因此,无论用户是访问sub1/index.cfm还是sub1/,“cgi.script_name”变量都将包括“index.cfm” 问题是,如何确定用户实际访问了哪个URL?这个问题主要是为了SEO目的——通常最好将“/index.cfm”重定向到“/”,

比方说,在一个ColdFusion站点上,用户已经导航到该站点

通常用于告诉您用户所在的URL的服务器端代码如下所示:

但是,“cgi.script_name”自动包含该文件夹的默认cfm文件-例如,该代码在解析和展开时将显示给我们“”

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


问题是,如何确定用户实际访问了哪个URL?这个问题主要是为了SEO目的——通常最好将“/index.cfm”重定向到“/”,以确保任何内容都只有一个URL——因为这主要是为了爬行器的利益,javascript在这种情况下不是合适的解决方案。另外,假设您没有访问isapi_rewrite或mod_rewrite的权限—问题是如何在ColdFusion中实现这一点。

不确定是否可以仅使用CF,但您可以使用Web服务器的URL重写来实现这一点——当然,如果您正在使用它们的话

对于Apache,它可以这样看。比如说,我们使用以下mod_重写规则:

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

现在,当我们尝试访问URL时,CGI显示:

查询字符串页=10&noindex=yes

看到这个主意了吗?当使用IIS时,同样的事情也是可能的


希望这有帮助。

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

Sergii是对的,您可以使用URL重写来实现这一点。如果您无法使用该选项,则可以使用以下事实:在默认页面列表中,特定页面具有优先权


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

我想这是不可能的

如果客户机请求“GET/”,则在调用ColdFusion之前,web服务器会将其转换为“GET/{which default file exists first}”。(这对于web服务器来说是必要的,因为它知道必须首先调用ColdFusion!)

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


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

我认为这是可能的

使用
GetHttpRequestData
可以访问所有HTTP头

然后,其中的
GET
标题将告诉您浏览器请求的文件

试一试


查看您可以使用的具体内容

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

Edit:做了更多的研究后,似乎
GetHttpRequestData
没有包含
GET
标题。所以这种方法可能行不通


但是我相信有一种方法-尝试转储CGI作用域,看看您有什么。

如果您能够安装ISAPI_rewrite(假设您在IIS上)——

它将在GetHttpRequestData()结果结构中插入一个变量x-rewrite-url,根据访问的url,该结构将具有/或/index.cfm


Martin

不,纯CF解决方案似乎不可能。CGI作用域和getHttpRequestData()都没有客户端URL字符串。
<cfdump var="#GetHttpRequestData()#">