2

私は Apache の mod_rewrite をよりよく理解しようとしていますが、予期しない結果が生じています。さまざまな表現を試しましたが、理解したとおりに動作するものはないようです。

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-l

RewriteRule ^(.*)$ index.php?route=$1 [QSA,L]

www.domain.com/item1/item2/item3利回りの使用利回りのitem1/item2/item3
使用利回りの 使用www.domain.com/item1/item2/item3.phpitem1/item2/item3.php
www.domain.com/item1/item2/item3...........item1/item2/item3

なぜそうではないのitem1/item2/item3...........ですか?

奇妙なことに、URLwww.domain.com/item1/item2/item3..........aitem1/item2/item3..........a

他のいくつかの正規表現を試しましたが、同様に動作します。

ありがとうございました。

4

2 に答える 2

1

Apache/.htaccess/mod_rewrite がこのように動作する理由を説明するドキュメントはまだ見つかりませんが、誰かがこれに出くわした場合に備えて、別の方法があります。

上記の私の質問のように、要求されたファイル名をクエリ文字列変数に渡すために .htaccess を使用する代わりにroute、PHP では使用できるサーバー変数がいくつかあります。そこで、index.php のロジックをクエリ文字列の読み取りから次のように変更しました。

trim( $_SERVER['REDIRECT_URL'], "/" );

REDIRECT_URL (および REQUEST_URI) サーバー変数は末尾のドットを保持し、トリムによって先頭と末尾のスラッシュが削除されます。これは、書き換えルールで発生することと同様です。

于 2012-06-22T13:52:38.327 に答える
1

私は同じ問題を抱えており、Windows プラットフォームの Apache のバグのようです。ただし、Linux では動作します。

https://issues.apache.org/bugzilla/show_bug.cgi?id=48687

于 2012-07-15T13:25:47.127 に答える