Coldfusion 友好的Url格式';mydomain.com/username';没有修改?
我想知道除了Mod Rewrite(使用fusebox框架或直接在Coldfusion中)之外,是否有更简单的方法来转换url,如下所示: 发件人: 致: 我的应用程序是一个现有的Fusebox 5.5应用程序 我只需要补充一点,上面的url不是静态的,即“salmahayek”可以是任何名称 任何帮助都将不胜感激Coldfusion 友好的Url格式';mydomain.com/username';没有修改?,coldfusion,fusebox,Coldfusion,Fusebox,我想知道除了Mod Rewrite(使用fusebox框架或直接在Coldfusion中)之外,是否有更简单的方法来转换url,如下所示: 发件人: 致: 我的应用程序是一个现有的Fusebox 5.5应用程序 我只需要补充一点,上面的url不是静态的,即“salmahayek”可以是任何名称 任何帮助都将不胜感激 谢谢您可以使用“经典”方式(不确定Fusebox是否会干扰),使用404处理程序,类似这样的方式应该可以做到: 在服务器上设置404 hander,例如在.htaccess中: Er
谢谢您可以使用“经典”方式(不确定Fusebox是否会干扰),使用404处理程序,类似这样的方式应该可以做到:
(未经测试,但应能正常工作)我不确定是否还有其他人,但我不明白为什么Mod重写会很困难,除非您使用IIS。重写规则必须是这样的:
^(login|register)/([^/\.]+) index.cfm?action=profile.$1&step=$2 [L]
^([^/\.]+)/?$ index.cfm?action=profile.view&name=$1
我添加了一些额外的示例,以检查用户是否真的试图进入注册或登录页面,以及他们在该页面上执行的步骤。我过去确实使用了Application.cfc的onMissingTemplate()方法。您可以对传入的arguments.targetpage执行一些正则表达式,也可以在数据库中执行查找。无论哪种方式,您都可以在之后对正确的页面执行cflocation。记住也要传递任何url参数 有一件事我从未尝试过,也经常想知道,这是否可以改为在onRequestStart()方法中处理?使用onMissingTemplate()的最大问题是,您正在执行一个全新的请求cflocation,并且无法传递表单变量。是的,我知道您可能会使用GetPageContext().Forward(strUrl)来代替,但您仍然会将整个请求生命周期用于原始请求。通过在onRequestStart()中执行此操作,可以避免这种情况
有人想测试一下吗?我目前在我的一个应用程序中做过类似的事情,尽管是在PHP中:
这非常有效,但如果不想重写,就必须忍受“index.cfm”。IIS将支持同样的操作。这是一个黑客攻击,但不会失败。嗨-抱歉-我想补充的是,上面的url不是静态的,即“salmahayek”可以是任何名称,因此硬编码的条目可能无法工作。厚颜无耻-根据coldfusion的评论,这只是一个示例,您可能希望用更好的检查来替换它,例如,确保它存在于数据库中等等,而不是盲目地通过profile.view操作发送任何404。
http://www.somedomain.com/index.cfm?action=profile.view&name=salmahayek
or
http://localhost/someApp/index.cfm?action=profile.view&name=salmahayek
<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>
^(login|register)/([^/\.]+) index.cfm?action=profile.$1&step=$2 [L]
^([^/\.]+)/?$ index.cfm?action=profile.view&name=$1
<cfset urlArgs=listToArray(CGI.PATH_INFO, "/") />
<cfset action=urlArgs[1] />
<cfset name=urlArgs[2] />