0

ColdFusion 10 で新しいサイトを開発しており、.htaccess ファイルを使用して URL の書き換えを行っています。他のインクルードなしで呼び出すと非常にうまく機能する 3 つのルールがあります。それらをインクルードでラップすると、エラーが発生します。

ここに私のルールがあります:

RewriteEngine on
RewriteRule ^advertise$ /index.cfm?Section=Advertise
RewriteRule ^bike/([0-9]+)/([0-9]+)/ /index.cfm?Section=Bike&BikeID=$1&FeatureID=$2
RewriteRule ^bike/([0-9]+)/ /index.cfm?Section=Bike&BikeID=$1

インデックス ページは、表示するセクションを特定し、次のようにヘッダーとフッターを囲む適切なファイルを呼び出します。

include "header.cfm"; 
include "#VARIABLES.Section#.cfm";
include "footer.cfm";

問題は、「Bike」​​ページ、つまり 2 番目の 2 つのルールではうまく機能しないことです。ヘッダー ファイルが何度か含まれているようで、CSS やその他のファイルへのリンクが悪く、ページが乱れています。ヘッダーとフッターのインクルードをコメントアウトすると、すべて正常に機能しますが、ヘッダーもフッターもありません。これは私が望んでいるものではありません。

// include "header.cfm"; 
include "#VARIABLES.Section#.cfm";
// include "footer.cfm";

URL 書き換えルールに、自転車のページが数回読み込まれて失敗する原因となるものはありますか?

http://flyingpiston2012-com.securec37.ezhostingserver.com/

こちらのページを試して、リンクをクリックして問題を確認してください。これを修正する方法についてのアイデアはありますか?

アップデート

URL 全体を含めてすべてのリンクを絶対リンクにすると、問題はなくなります。

<cfoutput>
<link href="#APP.Home#/bootstrap/css/bootstrap.css" rel="stylesheet">
</cfoutput>

それでも、ファイルへの絶対パスを含める必要はありません。なぜこれがうまくいかないのかについてのヒントはありますか?

アップデート

// THIS FIXES THE PROBLEM
<base href="#APP.Home#/">
<link href="/bootstrap/css/bootstrap.css" rel="stylesheet">

// THIS FIXES THE PROBLEM
<link href="#APP.Home#/bootstrap/css/bootstrap.css" rel="stylesheet">

// THIS IS THE PROBLEM
<link href="/bootstrap/css/bootstrap.css" rel="stylesheet">
4

3 に答える 3

3

問題が何であれ、.htaccess 書き換えルールと CF に含まれるファイルを関連付けようとするのは、間違ったトラブルシューティングのアプローチです。

書き換えルールは、着信要求 (ブラウザーのアドレス バー (たとえば) で要求されたドキュメント) にのみ適用されます。

ファイルをインクルードする場合、リクエストは行われないため、Web サーバー (およびそれに応じて書き換えモジュール) は関与しません。

バイク ページの書き換えられた URL (例: /index.cfm?Section-Bije&BikeID=12345) を参照するだけでも、同じ問題が発生すると思います。これは、書き換えが問題の一部ではないことを示しています。

この概念を調査から除外し、ファイルがどのように含まれているかを見てください。簡単に開始するには、デバッグを有効にして、TREE ビューを使用して実行時間の表示を確認します。これにより、テンプレートを何度も呼び出す場所/方法/理由がわかります。

于 2012-06-18T07:59:23.040 に答える
2

これは、一致時に解析を停止するように Apache に指示しなかったために発生する可能性があります。ルールを次のようにしてみてください。

RewriteRule ^advertise$ /index.cfm?Section=Advertise [L]
RewriteRule ^bike/([0-9]+)/([0-9]+)/ /index.cfm?Section=Bike&BikeID=$1&FeatureID=$2 [L]
RewriteRule ^bike/([0-9]+)/ /index.cfm?Section=Bike&BikeID=$1 [L]
于 2012-06-18T06:32:07.430 に答える
1

関連しているかどうかはわかりませんが、FW/1 で同様の問題に遭遇しました。rewrite.log を追跡することcfincludeで、実際には存在しないすべてのログが実際に Apache を経由していることがわかります。[NS].htaccessに追加したところ、消えてしまいました:

# rewrite rules, NS skips rewrite rule for internal sub-requests
# for FW/1, removes index.cfm from the URL
RewriteRule ^(.*)$ /index.cfm/$1 [NS,L]
于 2012-06-18T14:46:11.320 に答える