1

/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 ファイルが認識されないのはなぜですか?

4

1 に答える 1

3

問題が見つかりました。

httpd.confで変更しました

<Directory "/var/www/html">
        AllowOverride none

<Directory "/var/www/html">
        AllowOverride All

そのディレクトリ設定内にかなりの量のコメントがあり、それがそれを覆い隠していたため、これを見つけるのは困難でした。.confファイルには他にも多数のAllowOverrideAllステートメントがあり、設定がすでに設定されていると思いました。

しかし、待ってください、もっとあります!

また、IRCの「thumbs」という名前の人から、.htaccessファイルの内容をhttpd.confの<Directory>設定に直接配置する必要があることを学びました。これを行うと、AllowOverride noneに戻し、パフォーマンスを大幅に向上させることができます。

于 2013-03-06T03:07:44.893 に答える