2

私はこのhtaccessスクリプトを持っています

Options -Indexes
Options +FollowSymlinks

RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.+)$ /$1.php [L,QSA]

だから私はのようなページにアクセスすることができますexample.com/testが、私がそれに行こうとするとexample.com/test/500エラーがスローされます。誰かがそれが機能するために何を変更する必要があるか教えてもらえますか?おそらく愚かなエラー。

4

1 に答える 1

3

^(.+)$パターンを、末尾のスラッシュを個別に処理するパターンに変更します。^(.*[^/])/?$

Options -Indexes +FollowSymlinks

RewriteEngine on
RewriteBase /

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*[^/])/?$ /$1.php [L,QSA]

これは両方で機能し/test/test/-両方がに書き換えられ/test.phpます。

別の動作が必要な場合、動作させて/testも「404 Not Found」エラーが発生する/test/(愚かな「500サーバー側」エラーの代わりに)場合は、次のように使用できます。

Options -Indexes +FollowSymlinks

RewriteEngine on
RewriteBase /

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.+)$ $1.php [L]

上記のルールは、リライトを行う前にターゲットファイルが存在するかどうかをチェックします。/test.php存在しない場合、リライトは発生しません。

于 2012-04-20T11:56:11.377 に答える