2

たとえば、ColdFusionサイトで、ユーザーが http://www.example.com/sub1/に移動したとします。

ユーザーがどのURLにいるかを通知するために通常使用されるサーバー側のコードは、次のようになります 。http://#cgi.server_name ## cgi.script_name#?#cgi.query_string#

ただし、「cgi.script_name」には、そのフォルダのデフォルトのcfmファイルが自動的に含まれます。たとえば、そのコードを解析して展開すると、「http://www.example.com/sub1/index.cfm」と表示されます。

したがって、ユーザーがsub1 /index.cfmまたはsub1/にアクセスしているかどうかに関係なく、「cgi.script_name」変数にはその「index.cfm」が含まれます。

問題は、ユーザーが実際にアクセスしたURLをどのようにして把握するかということです。この質問は主にSEOの目的のためです-コンテンツの一部にURLが1つしかないことを確認するために、「/index.cfm」を「/」に301リダイレクトすることがしばしば望ましいです-これは主にスパイダーの利益のためであるため、javascript isnこの場合、適切な解決策ではありません。また、isapi_rewriteまたはmod_rewriteにアクセスできないと仮定します。問題は、ColdFusion内でこれを実現する方法です。

4

5 に答える 5

6

これはありえないと思います。

クライアントが「GET /」を要求すると、ColdFusion が呼び出される前に、Web サーバーによって「GET /{whatever-default-file-exists-fist}」に変換されます。(これは、ColdFusion を最初に呼び出す必要があることを Web サーバーが認識するために必要です!)

ColdFusion (または任意のアプリケーション サーバー) の観点から、クライアントは「GET /index.cfm」を要求しました。これが に示されています#CGI#

ご指摘のとおり、URL書き換えツールを使えば見分けがつきます。あなたはその道を明確に除外したので、ここでは運が悪いとしか言​​えません。

于 2009-02-23T22:29:00.990 に答える
3

CF のみを使用してそれが可能かどうかはわかりませんが、Web サーバーの URL 書き換えを使用してトリックを作成できます (もちろん、それらを使用している場合)

Apache の場合、このように表示されます。たとえば、次の mod_rewrite ルールを使用しています。

RewriteRule ^page/([0-9]+)/?$ index.cfm?page=$1&noindex=yes [L]

URL http://website.com/page/10/にアクセスしようとすると、CGI は次のように表示します。

QUERY_STRING ページ=10&noindex=はい

アイデアが見えますか?IIS を使用する場合も同じことが考えられます。

お役に立てれば。

于 2009-02-23T21:35:45.907 に答える
2

これはCFでは不可能だと思います。私の理解では、Web サーバー (Apache、IIS など) が表示するデフォルト ページを決定し、CF から要求します。したがって、CF は実際に呼び出されたページが何であるかを知りません。

URL 書き換えを使用してこれを行うことができるという Sergii の意見は正しいです。それが利用できない場合は、特定のページがデフォルト ページのリストで優先されるという事実を利用できます。

default.htm がデフォルト ページのリストの最初のページであるとします。index.cfm (またはその他のもの) に自動的に転送される汎用の default.htm を記述します。デフォルトのリストを調整できる場合は、CF に 301 リダイレクトを実行させることができます。そうでない場合は、HTML ファイルでメタリフレッシュ、JS リダイレクトなどを実行できます。

于 2009-02-23T22:28:03.397 に答える
1

ISAPI_rewriteをインストールできる場合(IISを使用していると仮定)-http: //www.helicontech.com/isapi_rewrite/

変数x-rewrite-urlをGetHttpRequestData()結果構造に挿入します。この構造には、アクセスしたURLに応じて/または/index.cfmが含まれます。

マーティン

于 2009-08-03T16:00:33.377 に答える
1

これは可能だと思います。

を使用GetHttpRequestDataすると、すべての HTTP ヘッダーにアクセスできます。

次に、そのGETヘッダーは、ブラウザーが要求しているファイルを示します。

試す

<cfdump var="#GetHttpRequestData()#"> 

使用できるものを正確に確認します。

注 - これを確認するための Coldfusion は手元にありません。

編集:さらに調査を行ったところ、ヘッダーGetHttpRequestDataが含まれていないようです。GETしたがって、この方法はおそらく機能しません。

ただし、方法があると確信しています-CGIスコープをダンプして、何があるかを確認してください。

于 2009-02-23T23:17:48.440 に答える