2

私は Isapi Rewrite 3 (IIS の mod 書き換えクローン) を使用しており、クエリ文字列に基づいて URL を書き換えようとしています。次に、書き換えでそのクエリ文字列の一部を渡します。

したがって、次のような URL を入力すると: /test/home.cfm?page=default&arbitraryExtraArg=123

/test/index.cfm?page=home&arbitraryExtraArg=123のように書き換えてください。

次の条件/ルールがあります。

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

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

これが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'

そこに RewriteCond パターン チェックについて言及する必要がありますか?

4

3 に答える 3

3

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

%1 は空白です。ログによると、作成した要求は /test/home.cfm?page=default - 2 番目のパラメーターなしであるためです。

ログに RewriteCond 処理がないのは、RewriteLogLevel が低いことが原因である可能性があります。

そして、構成は次のようになります。

RewriteCond %{QUERY_STRING} ^page=default(.+)$ [NC]

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

于 2009-07-09T14:46:41.557 に答える
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との互換性が高いようです。

于 2009-07-07T14:28:11.457 に答える
-1

私はこれもうまくいくと信じています:

RewriteRule ^/test/home.cfm\?page=default(.*)$ /test/index.cfm?page=home%1 [I,R=301]
于 2009-07-07T14:35:25.127 に答える