1
Options -Indexes
RewriteEngine on
Options +FollowSymLinks

RewriteRule ^$ 2012/index.php   [L]
RewriteCond %{DOCUMENT_ROOT}/2012%{REQUEST_URI} -f
RewriteRule .* 2012/$0 [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* 2012/index.php$0 [QSA] #<-- this is wrong here, and gives 500 error

2012 サブフォルダーからすべての URL をサーバーに送信しようとしています。

上記のスクリプトを試してみましたが、次のような URL では失敗します。

index.php/admin/controller/action?id=123

サブフォルダーから解決する必要があります
2012/index.php/admin/controller/action?id=123

なにが問題ですか?

4

1 に答える 1

0

/index.php/admin/controller/action?id=123URIが の -f テストに失敗し、%{DOCUMENT_ROOT}/2012%{REQUEST_URI}代わりに最後のルール によって切り上げられRewriteRule .* 2012/index.php?q=$0 [QSA]、URI が に変わると推測し/2012/index.php?q=index.php/admin/controller/action&id=123ます。最初の条件/ルールは既存のファイルをそのまま書き換えることを許可し、最後の条件/ルールは「キャッチオール」として機能するため、これには特別なケースを追加する必要があります (そして最初のルールは単にリクエスト URI/が 次のようなことを試してください:

RewriteRule ^$ 2012/index.php   [L]
RewriteCond %{REQUEST_URI} ^/index\.php [OR]
RewriteCond %{DOCUMENT_ROOT}/2012%{REQUEST_URI} -f
RewriteRule .* 2012/$0 [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* 2012/index.php?q=$0 [QSA]

RewriteCond %{REQUEST_URI} ^/index\.php [OR]で始まるリクエストが行われ/index.php、URIがそのまま/2012/ディレクトリに書き換えられれば、新しい条件が満たされます。[ OR]は、直接アクセスの以前の条件が尊重されることを保証します。

于 2012-04-08T22:36:38.070 に答える