【问题标题】:Using Application.cfc to route dns wildcards使用 Application.cfc 路由 dns 通配符
【发布时间】:2011-06-18 14:50:24
【问题描述】:

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

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

根文件夹中的index.cfm 只会列出城市 访问 city.domain.com 应该会显示 domain.com/city/index.cfm(如果存在)和 domain.com/index.cfm(如果不存在)。

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

【问题讨论】:

  • 你如何确定cityname?您如何确定将用户转发到哪里?此代码是否存在于 domain/cityname/index.cfm 和 application.cfc 中?代码会很有帮助。
  • 本用户在url中输入他们所在的城市。

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


【解决方案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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      您需要确保在 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>
      

      【讨论】:

      • 为了在 Daniels 解决方案之外再迈出一步,我会执行 if directoryExists('./#listFirst(CGI.SERVER_NAME,'.')#') 以确保通配符存在以及是否存在没有,转发到错误页面或注册或类似的东西。
      • 这应该发生在 Application.cfc 还是 root/index.cfm 中
      • 我可能会将它放在 onRequestStart 中,这样无论用户在域中的哪个位置都会发生这种情况。但这完全取决于您希望重定向如何工作。如果它应该只在他们点击 /index.cfm 时发生,他们就把它放在那里。如果您需要在有 cityname.domain.com URL 的任何时候发生这种情况,无论请求的文件是什么,然后将其放在 App.cfc 中的 onRequestStart 中。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-06
      • 1970-01-01
      • 1970-01-01
      • 2015-08-24
      • 2017-07-17
      • 1970-01-01
      相关资源
      最近更新 更多