すべてのリクエストを index.php にリダイレクトしたいのですが、%{REQUEST_URI} の部分は引数として index.php に渡す必要があります。また、 %{REQUEST_URI} 部分が既存のファイル/ディレクトリを指している場合でも、リダイレクトを実行したいと考えています。たとえばjs
、ドキュメント ルートに というディレクトリがあります。のように自分のサイトにアクセスすると、ディレクトリのコンテンツをブラウザに表示する代わりに、http://www.example.com/js
リダイレクトしたいと思います。http://www.example.com/index.php?uri=js
そこで、.htaccess ファイルに次の 2 行を追加しました。
RewriteEngine On
RewriteRule .* index.php?uri=%{REQUEST_URI} [QSA]
しかし、これはうまくいきません。
まず、既存のファイルへのパスを指定すると、たとえばhttp://www.example.com/foo.css
、ファイルのコンテンツがブラウザに表示されます。(私が欲しいのはhttp://www.example.com/index.php?uri=foo.css
) 次に、ディレクトリにアクセスするとき、たとえばhttp://www.example.com/js
、リダイレクトが発生しますが、css が有効にならず、サイトが破損しているように見えます。
良いニュースは、ルート内のファイル/ディレクトリを指していない任意の文字列を指定すると、正常に機能することです。これをデバッグするのに何時間も費やしましたが、手がかりがありません。どうすれば問題を解決できますか?
参考までに、Apache 2.4.3 を使用しています。