この質問は明確にするために編集されました:
次のように偽装する「きれいなURL」を作成しようとしています。
mysite.com/index.php?p=1 ==> mysite.com/site_one/index.php
mysite.com/aboutus.php?p=2 ==> mysite.com/site_two/aboutus.php
mysite.com/anypage.php?p=3 ==> mysite.com/site_three/anypage.php
ご覧のとおり、mod_rewriteは、単に「p」変数を所定の疑似ディレクトリに変換する必要があります(このディレクトリは存在しません...これは単なる美的書き換えです)。
明らかに、これは複雑さを生み出します。ユーザーがmysite.com/site_one/index.phpにアクセスすると、mysite.com / index.php?p=1へのバックグラウンド転送が必要です。このバックグラウンド転送により、サーバーエラーが発生するループが発生します。
次のコードを使用して、このループを防止しようとしました。
RewriteCond %{QUERY_STRING} !NON=
RewriteCond %{QUERY_STRING} ^(.*[&?])?p=1([&].*)?$
RewriteRule ^/?(.*) /site_one/$1 [PT,L]
RewriteCond %{QUERY_STRING} !NON=
RewriteRule ^/?site_one/?(.*) /$1?NON=1&p=1 [PT,L]
残念ながら、これでもサーバーエラーが発生します。誰かがコードがどこで間違っているかを見ることができますか?