让我们说,在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中实现这一点,特别是。
答案 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。
马丁