4

我在 ColdFusion 中构建了一个应用程序,所有请求都将通过 index.cfm 文件运行。

我有一个重写 URL 的 .htaccess 文件。所以,例如......如果我写:

http://domain.com/hello/goodbye/howdy

实际请求总是像这样使用 index.cfm:

http://domain.com/index.cfm/hello/goodbye/howdy

这一切都很好,但现在我不知道如何获取 URL 中的所有内容。似乎没有一个 CGI 变量不输出 URL 的“/hello/goodbye/howdy”部分。

我试过 cgi.path_info 和 cgi.query_string 等都无济于事......它们只是空白。

我需要获取域名之后的所有内容,并用它在 CF 中做一些事情。我知道这在 JS 中是可能的,但我真的需要在服务器上这样做。

转储 CGI 范围在这方面没有任何用处:

<cfdump var="#cgi#" />

这是我的 htaccess 文件供参考:

<IfModule mod_rewrite.c>

RewriteEngine On

RewriteBase /
RewriteRule ^index\.cfm$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.cfm [L]

RewriteCond %{HTTP_HOST} !^www\.
RewriteCond %{HTTP_HOST} !^([^\.]+)\.domain\.com
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]

</IfModule>

谢谢。

编辑:

作为附加说明,我还尝试了像这样的底层 Java 方法:

<cfdump var="#getPageContext().getRequest().getContextPath()#" />
<cfdump var="#getPageContext().getRequest().getRequestURL()#" />
<cfdump var="#getPageContext().getRequest().getQueryString()#" />

没有成功:(

4

4 回答 4

5
<IfModule mod_rewrite.c>

RewriteEngine On
RewriteBase /

RewriteRule ^index\.cfm$ - [L]

RewriteCond %{HTTP_HOST} !^www\.
RewriteCond %{HTTP_HOST} !^([^\.]+)\.domain\.com
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-l

#Change exists here:
RewriteRule ^(.*)$ /index.cfm?actualuri=$1 [L,QSA]

</IfModule>

现在试试cgi.query_string。它应该有actualuri=/the/path/sent
另外,将重写规则按照与上面相同的顺序放置。

于 2012-02-15T11:14:40.903 回答
3

检查#CGI.REQUEST_URI# - 它没有记录但有效

于 2012-02-15T11:28:00.147 回答
2

我希望这就是你要找的。

  <cfset link = "http://" & GetHttpRequestData().headers['host'] & GetHttpRequestData().headers['X-REWRITE-URL'] >
于 2013-08-05T21:52:01.397 回答
0

我认为最简单的方法是实际查看该CGI.PATH_INFO领域。

于 2012-02-15T21:38:32.223 回答