使用Application.cfc路由dns通配符

时间:2011-01-31 14:08:18

标签: coldfusion url-rewriting dns wildcard-subdomain application.cfc

我正在使用godaddy coldfusion共享主机帐户,我想为我的用户提供更友好/更直接的网址。 我已经为我的域添加了一个通配符,因此所有子域都指向相同的根文件夹。

如何仅使用Application.cfc将dns通配符路由到适当的目的地?

根文件夹中的

index.cfm将仅列出城市 如果存在,则访问city.domain.com会显示domain.com/city/index.cfm,如果不存在,则显示domain.com/index.cfm

我尝试了cflocation,但我认为它进入了一个无限循环。

3 个答案:

答案 0 :(得分:2)

您需要确保在CGI.SERVER_NAME中检查正确的内容。这样的事情可以解决问题:

<cfif ListLen(CGI.SERVER_NAME, ".") NEQ 2 AND ListFirst(CGI.SERVER_NAME, ".") NEQ "www">
    <cflocation url="http://domain.com/#ListFirst(CGI.SERVER_NAME, ".")#/index.cfm" />
</cfif>

答案 1 :(得分:1)

如果放在root / index.cfm的顶部,听起来你的现有代码可以正常工作。您可以使用Application.cfc中的onMissingTemplate()来补充它,以处理404情况。

答案 2 :(得分:1)

您可以随时进行服务器端重定向,并将其全部隐藏在客户端之外。

所以定期请求转到index.cfm(www.domain.com)

然后如果有一个城市(在onRequestStart()中):

city = ListFirst(CGI.SERVER_NAME, ".");
if(!StructKeyExists(request, "forward") AND (city != "www" || city != "domain"))
{
   request.forward = 1;
   getPageContext().forward("/#city#/index.cfm");
   abort;
}

我将请求范围变量'forward'放在那里以停止潜在的无限循环,因为再次调用Application.cfc。

您可以在此处查看更多详细信息:

http://www.compoundtheory.com/?action=displayPost&ID=26

http://download.oracle.com/javaee/6/api/javax/servlet/jsp/PageContext.html#forward%28java.lang.String%29