没有Mod Rewrite的格式为“mydomain.com/username”的友好网址?

时间:2010-12-01 18:30:16

标签: coldfusion fusebox

我想知道除了Mod Rewrite(使用fusebox框架或直接在Coldfusion中)之外,还有一种更简单的方法来转换网址,如下所示:

从:

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应用程序。

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

非常感谢任何帮助 感谢

4 个答案:

答案 0 :(得分:1)

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

  1. 在您的服务器上设置404个管理员,例如在.htaccess:

    ErrorDocument 404 /404handler.cfm

  2. 设置404handler.cfm以包围框架,例如:

  3.     <cfset variables.checksok = false>
        <!--- do some checks - example --->
        <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 template="index.cfm">
        </cfif>
    

    (未经测试但应该有效)

答案 1 :(得分: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”。

答案 2 :(得分:0)

我不确定其他人,但我不明白为什么Mod Rewrite很难,除非你在IIS上。重写规则只需要是:

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

我添加了一些额外的例子来检查用户是否真的想要进入注册或登录页面,以及他们在那里采取了什么步骤。

答案 3 :(得分:0)

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

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

有人想测试一下吗?