你如何获得给定页面的重写CFWheels URL?

时间:2011-12-06 21:22:43

标签: coldfusion coldfusion-9 cfwheels

CFWheels具有URLFor()功能,可根据提供的参数获取内部URL。有没有办法在不提供任何参数的情况下获取内部URL?

例如: 鉴于用户导航到“http://somedomain.com”或“http://somedomain.com/about/”或“http://somedomain.com/contact/”,有一个类似ReWrittenURL()的方法返回像“/”或“/ about /”或“/ contact /”这样的东西?

使用不带参数的URLFor()会返回“/ home / index”或“/ about / index”或“/ contact / index”。

CGI.SCRIPT_NAME返回“/rewrite.cfm”

显然,使用document.location.href的Javascript,我可以得到我想要的东西。

3 个答案:

答案 0 :(得分:5)

CGI.path_info是否具有您要查找的值?

修改

起初,我删除了这篇文章,完全被混淆了。现在我做了一点测试 - 我下载了最新的wheel核心文件(1.1.6),解压缩到IIS 7.5(安装了URL Rewrite模块)+ CF9 webserver,并编辑了核心中的“web.config”文件root,为重写规则设置“enabled ='true'”。此外,由于我从子文件夹运行此示例,我将路径从“/rewrite.cfm”更改为“rewrite.cfm”。这让我能够成功地请求这样的网址:

http://server/wheelstest/wheels/wheels

从这里开始,我在views / wheels下编辑了layout.cfm,添加了:

<cfdump var="#cgi#">

当我请求上面的URL(/ wheelstest / wheels / wheels)时,我看到了cgi范围的转储。在path_info下,这是值:/ wheels / wheels。

接下来,我在views / wheels下添加了一个空白的“index.cfm”文件。

当我请求/ wheelstest / wheels时,我得到了path_info:“/ wheels”。

当我请求/ wheelstest / wheels /时,我得到了path_info:“/ wheels /".

当我请求/ wheelstest / wheels / index时,我得到了path_info:“/ wheels / index”。

当我请求/ wheelstest / wheels / index /时,我得到了path_info:“/ wheels / index /".

所以基本上--cgi.path_info正在为我完成你想要的描述。您的设置与我的设置有什么不同,以至于它没有为您返回该值?

答案 1 :(得分:3)

可能有更好的方法来做到这一点......但无论如何我都去了

每个页面都会发送#params#

    <cfdump var="#params#">
    <cfoutput>#params.action#/#params.controller#/#params.key#</cfoutput>
    <cfabort>

尝试将其放入控制器并查看结果

问题是如果params对象内的对象不存在,则会出错。因此,生成的路径需要检查struct key是否存在并进行相应的编辑。

答案 2 :(得分:1)

CGI.Path_Info 会给你想要的结果。我一直在尝试不同的选项,但是它们都失败了并进入了重定向循环。一旦我切换了 CGI.path_info 一切都开始了。