0

我想知道除了 Mod Rewrite(使用 fusebox 框架或直接在 Coldfusion 中)是否有更简单的方法来转换 url,如下所示:

从:

http://www.somedomain.com/salmahayek
or 
http://localhost/someApp/salmahayek

到:

http://www.somedomain.com/index.cfm?action=profile.view&name=salmahayek
or
http://localhost/someApp/index.cfm?action=profile.view&name=salmahayek

我的应用程序是现有的 Fusebox 5.5 应用程序。

我只需要补充一点,上面的网址不是静态的,即“salmahayek”可以是任何名称。

任何帮助将不胜感激谢谢

4

4 回答 4

1

您可能会使用“经典”方式(不确定 Fusebox 是否会干扰),使用 404 处理程序,这样的事情应该可以解决问题:

  1. 在您的服务器上设置 404 处理程序,例如在 .htaccess 中:

    错误文档 404 /404handler.cfm

  2. 设置 404handler.cfm 来环绕框架,例如:

    <cfset variables.checksok = false>
    <!--- 做一些检查 - 例子 --->
    <cfif cgi.REDIRECT_URL EQ 'salmahayek'>
        <cfset variables.checksok = true>
    </cfif>
    <cfif variables.checksok EQ true>
        <cfheader statuscode="200" statustext="OK">
        <cfset url.action = "profile.view">
        <cfset url.name = cgi.REDIRECT_URL>
        <cfinclude 模板="index.cfm">
    </cfif>

(未经测试,但应该可以工作)

于 2010-12-01T18:54:08.583 回答
1

我目前在我的一个应用程序中做了一些这样的事情,尽管是在 PHP 中:

http://localhost/index.cfm/profile.view/salmahayek/

<cfset urlArgs=listToArray(CGI.PATH_INFO, "/") />
<cfset action=urlArgs[1] />
<cfset name=urlArgs[2] />

这非常有效,但如果您不想重写,则必须忍受“index.cfm”。

于 2010-12-02T13:34:35.203 回答
0

我不确定其他人,但我不明白为什么 Mod Rewrite 会很困难,除非你在 IIS 上。重写规则必须是这样的:

^(login|register)/([^/\.]+) index.cfm?action=profile.$1&step=$2 [L]
^([^/\.]+)/?$ index.cfm?action=profile.view&name=$1

我添加了一些额外的示例来检查用户是否真的试图进入注册或登录页面,以及他们在那里执行的步骤。

于 2010-12-01T19:47:19.663 回答
0

实际上,我过去曾使用 Application.cfc 的 onMissingTemplate() 方法完成此操作。您可以对传入的 arguments.targetpage 执行一些正则表达式,也可以在数据库中进行查找。无论哪种方式,您都会在之后对正确的页面进行 cflocation。只记得传递任何 url 参数。

我从未尝试过并且经常想知道的一件事是是否可以在 onRequestStart() 方法中处理?我在使用 onMissingTemplate() 时遇到的最大问题是你正在做一个 cflocation,这是一个全新的请求,你不能通过表单变量。是的,我知道您可能可以改用 GetPageContext().Forward( strUrl ),但是您仍然会为原始请求投入整个请求生命周期。通过在 onRequestStart() 中执行此操作,您可以避免这种情况。

有人想测试一下吗?

于 2010-12-01T20:29:27.720 回答