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,我可以得到我想要的东西。
答案 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 一切都开始了。