2009-07-07 12 views
1

Isapi Rewrite 3(IIS用のmodリライト・クローン)を使用していて、クエリ文字列に基づいてURLを書き直そうとしていて、そのクエリ文字列の一部を書き換え。Isapi Rewrite - RewriteRuleでクエリ文字列パターンに一致する

私はこのようなURLを入力してあれば:/test/index.cfm?page:/test/home.cfm?page=default & arbitraryExtraArg = 123

私はのように書き換えることにしたいです

RewriteCond %{QUERY_STRING} ^page=default(.*)$ [I] 
RewriteRule ^/test/home.cfm$ /test/index.cfm?page=home%1 [I,R=301] 

しかし、余分なクエリ文字列variabl:=自宅& arbitraryExtraArg = 123

私は、次の条件/ルールを持っていますesは決して通過しません。 %1は空白のようです。

これは、RewriteCondからパターンマッチを参照する方法です。

私はここで何が欠けていますか?

ありがとうございます!

EDIT:RewriteCondが完全に無視されているように見えます。そこでのRewriteCondパターンチェックの言及があるはず

[snip] (2) init rewrite engine with requested uri /test/home.cfm?page=default 
[snip] (1) Htaccess process request C:\Inetpub\wwwroot\dev\IsapiRewrite\httpd.conf 
[snip] (3) applying pattern '^/test/home\.cfm$' to uri '/test/home.cfm' 
[snip] (1) escaping /test/index.cfm?page=home 
[snip] (2) explicitly forcing redirect with http://www.devsite.com/test/index.cfm?page=home 
[snip] (2) internal redirect with /test/home.cfm?page=default [INTERNAL REDIRECT] 

[snip] (2) init rewrite engine with requested uri /test/index.cfm?page=home 
[snip] (1) Htaccess process request C:\Inetpub\wwwroot\dev\IsapiRewrite\httpd.conf 
[snip] (3) applying pattern '^/test/home\.cfm$' to uri '/test/index.cfm' 

:ここに私のログファイルがどのように見えるのですか?

+0

しかし、ルールは適用されますか? – Gumbo

+0

うん、まさに。私は/test/index.cfm?page=homeに行きます。 – stubotnik

+0

そして、 '/test/home.cfm?page = default'の最初のリクエストはどうですか?あるいは、 '/test/index.cfm?page = home'だけで長時間テストしていますか?もしそうなら、おそらく、あなたはURL書き換えがどのように機能するか誤解していました。彼らは要求されたURIを書き換えるだけです! – Gumbo

答えて

3

しかし、余分なクエリ文字列変数が渡されることはありません。 %1は空白のようです。

%は空白です。ログによると、リクエストは2番目のパラメータなしで/test/home.cfm?page=defaultです。

ログ内のRewriteCond処理が不足しているのは、RewriteLogLevelが低いためです。

および構成は次のようになります

するRewriteCondの%{QUERY_STRING} ^ページ=デフォルト(+)$ [NC]

のRewriteRule^/試験/ home.cfm $ /test/index.cfm ?page = home%1 [NC、R = 301、L]

+0

華麗なもの - ありがとう! 私が設定していた[I]フラグのように、RewriteCond全体が無視されていました。 [I] - 「Ignore case」 - IsapiRewriteバージョン2の二日酔いでした。 – stubotnik

0

私はISAPI書き換えがmod_rewriteはには少し異なっていると思う:

あなたは、複雑なルールに存在する任意の正規表現(条件付きルール)に括弧を入れるたびあなたが使用できる部分マッチをマーキングされています($Nシンタックスを使用して)書式文字列を使用するか、後続の条件でバックリファレンス(\Nシンタックスを使用)として使用します。これらのサブマースは、複雑なルール全体(RewriteRuleディレクティブおよびそれに対応するRewriteCondディレクティブ)に対してグローバルです。サブマッチは、RewriteRuleに対応する最初のRewriteCondディレクティブ(そのようなディレクティブが存在する場合)から始まり、下から左に番号が付けられます。

だから、関係なく、それが表示される場所最初のグループの試合を取得しないように$1を試してみてください。

RewriteCond %{QUERY_STRING} ^page=default(.*)$ [I] 
RewriteRule ^/test/home\.cfm$ /test/index.cfm?page=home$1 [I,R=301] 

ISAPI Rewrite 3は、Apacheのmod_rewriteにもっと互換性があるように思われます。

+0

いいえ運がよろしいですか?私は実際にISAPIリライト3を使用しています - ちょうどそれを昨日に切り替えました - だから私はこれらのルールを改訂しています – stubotnik

+0

あなたの理由が分からないのは分かりません。あるいは、それと矛盾するかもしれない他のルールがありますか? – Gumbo

+0

RewriteLogディレクティブ以外のすべてのルールを削除しました。これは成功しません。上記の質問を編集してログ出力を含めてみました。うまくいけば光を当てることができます。 – stubotnik

-1

私は、これがまた働くと信じて:

RewriteRule ^/test/home.cfm\?page=default(.*)$ /test/index.cfm?page=home%1 [I,R=301] 
+0

この種のルールはISAPIリライト2で機能しましたが、ISAPIリライト3はApache modリライトのクローンです。 modリライトサイトから: 注:クエリ文字列 パターンはクエリ文字列と照合されません。代わりに、%{QUERY_STRING}変数でRewriteCondを使用する必要があります。 – stubotnik

+0

ああ、おかげで、ありがとう! –

関連する問題