私は、クエリ文字列は、DEBUGフレーズが含まれている場合の.htaccessに書き換え中のURLの現在の状態をエコーしよう:mod_rewrite書き換えルールは、置き換えの位置によって異なりますか?
RewriteCond %{QUERY_STRING} DEBUG
RewriteRule .+ echo.php?ip=%{REMOTE_ADDR}&url=$0&query=%{QUERY_STRING} [L]
を、私のecho.phpスクリプトが期待されるURLをエコーします。私が代わりにパラメータの順序を変更したときに
しかし、不思議なこと:
RewriteRule .+ echo.php?url=$0&ip=%{REMOTE_ADDR}&query=%{QUERY_STRING} [L]
エコーされたURLは、それ自体が "echo.php" です。 これが予想される動作ですか、もしそうなら、なぜですか?
バックリファレンスをエスケープするために '[B]'フラグを追加することができます。これは、エスケープされていないURLが追加された場合の問題です。とにかく 'REQUEST_URI'環境変数を使ってURLを取得することができます。あなたはそれを渡す必要はありません。' QUERY_STRING'と 'REMOTE_ADDR'と同じです。 PHPでは、 '$ _SERVER ['REQUEST_URI']'のような '$ _SERVER'配列にあります。また、このようにしたい場合は、 'ENV'を追加する必要があります。したがって、'%{ENV:REMOTE_ADDR} 'はアクセスしている環境変数と同じです。しかしあなたの質問に記載されている問題を解決するには、 '[B]'フラグを試してください。 – SuperDuperApps
'[B]'フラグを追加しても役に立ちませんでした。 PHPスクリプトでURLを取得する方法を知ってくれてありがとうございましたが、mod_rewriteがどのように動作しているのか、そしてURLをエコーするのではなく奇妙な方法で動作する理由を知りたいと思っていました。 –
@SuperDuperAppsあなたは "とにかくREQUEST_URI環境変数でURLを取得できます"と書いていますが、書き換えルールが2つ以上ある場合は、書き換えプロセスの途中でURLの現在の状態を取得できません。それは私がやったやり方だ。 –