0

少しややこしい質問があります。mod_rewrite を理解しようとしていますが、かなり混乱しています。

私がやろうとしているのは、/settings/account や /user/user123 などのすべての URL を index.php にリダイレクトすることです。PHP スクリプト (作成済み) は、$_SERVER['REQUEST_URI'] を使用して URL を分割し、インクルードを使用します。たとえば、settings.php?page=account または user.php?uid=user123 が含まれます。

しかし、URL が /settings.php?page=account または /user.php?uid=user123 の場合、インデックス経由でリダイレクトされることは望ましくありません。つまり、URl にファイル拡張子がある場合はそのファイルに移動しますが、そうでない場合 (/settings など) は index.php に移動して、どこに移動するかを処理します。

これはどのように行うことができますか?提案をお寄せいただきありがとうございます!

4

2 に答える 2

0

一般的なredirect-every-url-which-has-no-corresponding-fileアプローチを使用したくない場合は、アプローチを試すこともできます。ドットのないものを一般的なスクリプトにリダイレクトするには、次を使用します。

 RewriteRule  ^([^.]*)$  index.php?path=$1

images/などなど、一部のURLをまだ除外したい場合がありますcss/。ルールの前に単純なRewriteCondを使用してから、次のようにします。

 RewriteCond  %{REQUEST_URI}  !images/
 RewriteCond  %{REQUEST_URI}  !css/
于 2012-10-18T01:41:01.343 に答える
0

必要なのは、andパターンを使用したRewriteCondディレクティブです。!-f!-d

RewriteCondユーザーのHTTPリクエストが提供された条件に一致するかどうかをチェックします。あなたの場合、要求されたファイル(変数で提供される%{REQUEST_FILENAME})が接尾辞を使用してドキュメントルートにすでに存在するかどうかを確認する必要があります!-f。同様に、ディレクトリでインデックスを作成する場合は、と同じパターンを追加できます!-d。これにより、要求されたディレクトリがドキュメントルートにあるかどうかがチェックされます。

したがって、実際の前のこれらの2行でRewriteRuleうまくいきます。

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
于 2012-10-18T01:42:31.363 に答える