4

私はColdFusionで構築しているアプリケーションを持っています。これにより、すべてのリクエストがindex.cfmファイルを介して実行されます。

URLを書き換える.htaccessファイルがあります。だから、例えば...私が書いた場合:

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

実際のリクエストは常に次のようにindex.cfmを使用します。

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

これはすべてうまく機能しますが、URLにあるすべてのものを取得する方法に固執しています。CGI変数の1つが、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 に答える