0

ColdFusion アプリケーションを引き継いでいますが、書き直しに問題があります。

サイトは IIS7/CF9.0.1/SQL Server スタック上にあります。Helicon マネージャーが書き換えを処理しています。

ほとんどの URL は html ファイルに書き込まれるため、/profile.html のようになります。

URL は次の行で書き換えられます。

RewriteRule /([^\?]*?)\.(html)(\??)(.*)? /default.cfm?name=$1.$2&$4 [I]

/view.html?id=123 のようなクエリ文字列がある場合に問題が発生します。クエリ文字列は $4 変数で記述する必要がありますが、次のように URL をダンプすると、アプリケーションで何も得られません。

<cfset objRequest = GetPageContext().GetRequest() />
<cfset strUrl = objRequest.GetRequestUrl().Append(
"?" & objRequest.GetQueryString()
 ).ToString()
 />
<cfoutput>#strUrl#</cfoutput>

http://10.211.55.6/default.cfm?name=view.html&のようなものが得られます。クエリ文字列は表示されません。

私はそれがIISの設定だと思います.htmlハンドラーがGET変数にアクセスできるようにしますか?.html ハンドラを設定しましたが、うまくいきません。

4

1 に答える 1

3

これが機能しない理由は、RewriteRule がクエリ文字列を認識せず、リソースのパスのみを認識するためです。クエリ文字列にアクセスするには、書き換え条件を使用する必要があります

RewriteEngine on
RewriteBase /

RewriteCond %{QUERY_STRING}            ^(.*)$
RewriteRule ^([^\.]+)\.html$           default.cfm?name=$1.html&%1 [NC,L]

この例では、クエリ文字列を調べているだけ%1で、 this の最初のグループRewriteCondが過剰であることを意味するため、何も一致させる必要がないため、次のようにすることができます:-

RewriteEngine on
RewriteBase /

RewriteRule ^([^\.]+)\.html$           default.cfm?name=$1.html&%{QUERY_STRING} [NC,L]

ただし、スマートな方法は、正しいフラグを使用してやりたいことを実行することです。これはQSA、次のようにクエリ文字列を追加することを意味します。

RewriteEngine on
RewriteBase /

RewriteRule ^([^\.]+)\.html$           default.cfm?name=$1.html [NC,QSA,L]

Helicon の ISAPI リライトに関するすべてのドキュメントは、http ://www.helicontech.com/isapi_rewrite/doc/ にあります。ブックマークするのにとても便利です。

それが役立つことを願っています。

于 2012-04-16T05:29:06.273 に答える