-2

この質問は非常に一般的で、私も多くの回答を検索して試しましたが、問題を解決できる適切な形式を取得できませんでした。

私が欲しいもの。

  1. すべてのエラードキュメントをリダイレクトします(つまり、見つからないファイルまたはディレクトリリクエストは、ルートファイル(私の場合はindex.php)にリダイレクトする必要があります)

  2. すべてのページリクエストをパラメータとしてルートファイル(index.php)にリダイレクトします。つまり、誰かが次のようなURLを入力した場合

domain.com/directory_request/file_request

その後、それはとして扱われる必要があります

domain.com/index.php?directory=directory_request&file=file_request

のようなリクエスト

domain.com/directory_request1/directory_request2/file_request

その後、それはとして扱われる必要があります

domain.com/index.php?directory=directory_request1-directory_request2&file=file_request

  1. すべての画像、css、javascript、ファイルをルートファイルにリダイレクトしないでください。もう1つ、存在しないcss、画像などもすべてルートファイルにリダイレクトする必要があります。

要するに、すべての既存の画像javascript、cssリクエストを除いて、リクエストされたすべてのURLは、ポイント2で前述したリクエストのパラメータを使用してルートファイルindex.phpにリダイレクトする必要があります。

私は私のポイントをクリアしたいと思います。

前もって感謝します。

4

2 に答える 2

3

通常、このような場合は、すべてのリクエストをフロントコントローラーに送信し$_SERVER['REQUEST_URI']、そのファイルの内部を解析するのが最善です。これにより、すべてのルールと解析を1か所に保持できます(.htaccessのURLを解析し、フロントコントローラーでリクエストをルーティングするのとは対照的です)。

そのような単純なルールは次のようになります(.htaccessファイルまたはhttpd.conf内):

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php [QSA,L]

は、要求されたファイル名が実際のファイルではない場合RewriteCondにのみ実行するようにApacheに指示しています。RewriteRule

于 2013-01-07T15:59:17.007 に答える
2

RewriteCond'sを使用して、要求されたディレクトリ/ファイルが存在するかどうかを確認するのがおそらく最善です。

RewriteCond %{REQUEST_URI} !-d
RewriteCond %{REQUEST_URI} !-f

そして、これらを各ルールの前で使用できます。希望どおりに取得するには、次のように必要な数のルールを使用できます。

RewriteRule ^(.*)/(.*)$ index.php?directory=$1&file=$2
于 2013-01-07T16:00:41.363 に答える