2

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”

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

4

3 回答 3

5

CGI.path_info 是否具有您正在寻找的价值?

编辑

起初,我删除了这个帖子,完全被迷惑了。现在我做了一点测试——我下载了最新的 Wheels 核心文件(1.1.6),解压到 IIS 7.5(安装了 URL Rewrite 模块)+ CF9 网络服务器,并在核心中编辑了“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 正在为我做你所描述的你想要的。您的设置与我的设置有何不同,以至于它不会为您返回该值?

于 2011-12-06T21:27:50.943 回答
3

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

每个页面都会发送#params#

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

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

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

于 2011-12-07T02:48:29.697 回答
1

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

于 2021-04-16T02:09:37.383 回答