Isapi Rewrite - RewriteRule で一致するクエリ文字列パターンにアクセスします

StackOverflow https://stackoverflow.com/questions/1092566

質問

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 パターン チェックについて言及する必要がありますか?

役に立ちましたか?

解決

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

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

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

そして、設定は次のようになります。

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

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

他のヒント

ISAPI Rewrite は mod_rewrite とは少し異なると思います。

複雑なルール (条件付きルール) 内に存在する正規表現にかっこを入れると、フォーマット文字列で使用できる部分一致をマークすることになります ( $N 構文)または後方参照として(使用 \N 構文) を後続の条件で使用します。これらの部分数学は、複雑なルール全体に対してグローバルです (書き換えルール ディレクティブと対応する 書き換え条件 指令)。サブマッチには、最初から上から下、左から右に番号が付けられます。 書き換え条件 に対応するディレクティブ (そのようなディレクティブが存在する場合) 書き換えルール.

それで試してみてください $1 最初のグループがどこに出現しても一致するものを取得するには、次のようにします。

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

ISAPI リライト 3 Apache の mod_rewrite との互換性が高いようです。

これもうまくいくと思います:

RewriteRule ^/test/home.cfm\?page=default(.*)$ /test/index.cfm?page=home%1 [I,R=301]
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top