/var/www/html に codeigniter プロジェクトがインストールされています。URL は次のようになります: http://example.com/clients/abc CentOS と Apache 2.2.15 を実行しています。
ルートを正しく機能させるために、httpd.conf で mod_rewrite (phpinfo.php で確認できます) と AllowOverride All を有効にしました。
httpd.conf で定義されているドキュメントルートは /var/www/html です。
/var/www/html の .htaccess ファイルは次のとおりです。
<IfModule mod_rewrite.c>
DirectoryIndex index.php
RewriteEngine on
RewriteCond $1 !^(index\.php|images|css|js|robots\.txt|favicon\.ico)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ ./index.php/$1 [L,QSA]
</IfModule>
これだけで、すべてのコントローラーで 404 ページが取得され、インデックス以外のコントローラー/ビューはレンダリングされません。
でも。/var/www に 2 つ目の .htaccess ファイルを作成し、その中に次の 1 行を追加するとします。
ErrorDocument 404 /index.php
これで、書き換えが機能し、コントローラーとすべてのページが適切に読み込まれます。ただし、firebug で見つからない 404 ページがまだ表示されますが、ページはまだ読み込まれます。
ここでは、私が理解も尊重もしていない、奇妙でクレイジーなことが起こっています。ダブルリダイレクト?Apache は DocumentRoot の意味を知りませんか? /var/www に別の .htaccess ファイルがない限り、/var/www/html/.htaccess ファイルが認識されないのはなぜですか?