2

Webアプリケーションのルートフォルダに次の.htaccessがあります。

RewriteEngine on

RewriteCond %{HTTP_HOST} ^\.(.*) [NC]
RewriteRule ^(.*) http://%1/$1 [R=301,L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^.*$ index.php?req=%{REQUEST_URI}&%{QUERY_STRING}

これは、1つの例外を除いて、希望どおりに機能します。ディレクトリが実際に存在する場合、要求がPHPスクリプトに渡されるのではなく、そのディレクトリが提供されます。

したがって、ディレクトリ/ docs /が存在する場合、index.htmはブラウザに送信されますが、存在しないディレクトリ/ doesnotexist /のリクエストは、PHPスクリプトに渡されます。

場所が存在するかどうかに関係なく、すべてのリクエストがPHPに渡されるように、これを修正する方法はありますか?

4

1 に答える 1

1

2 番目の条件セットは、一致する要求が既存のファイルや既存のディレクトリを指さないように制限します。そのため、ブラウズし/docs/てディレクトリが存在する場合、ルールは起動しません。

これを修正するために必要なことは、2 番目の書き換え条件を取り除くことだけです。これにより、その下にあるルールが、既存のファイルを指していないすべてのリクエストで起動されます。実際に、すべてのリクエストを PHP スクリプトにリダイレクトしたい場合は、最初の書き換え条件も排除する必要があります。

RewriteCond %{REQUEST_FILENAME} !-f
# RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^.*$ index.php?req=%{REQUEST_URI}&%{QUERY_STRING}

#mod_rewrite によって取得されないように、行のコメントを解除することに注意してください。

于 2012-08-18T14:51:22.370 に答える