.htaccess无法从DocumentRoot目录中正确读取

时间:2013-03-05 18:49:28

标签: apache .htaccess codeigniter mod-rewrite centos

我在/ var / www / html中安装了一个codeigniter项目。 网址应如下所示: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中创建第二个.htaccess文件并将其中的一行放入其中:

ErrorDocument 404 /index.php

现在我的重写工作正常,我的控制器和我的所有页面都正确加载。但是我仍然在firebug中找不到404页面,但我的页面仍然加载。

这里发生了一些我不理解或不尊重的奇怪和疯狂的事情。双重重定向? Apache不知道DocumentRoot的含义是什么?为什么除非在/ var / www中有另一个.htaccess文件,否则无法识别/var/www/html/.htaccess文件?

1 个答案:

答案 0 :(得分:3)

发现问题。

在httpd.conf中我改变了

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

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

这很难被发现,因为该目录设置中存在大量评论并且使其模糊不清。 .conf文件中还有许多其他AllowOverride All语句,这让我觉得我已经设置了设置。

但等等,还有更多!

我还从IRC上名为'thumbs'的家伙那里了解到,我应该将.htaccess文件的内容直接放入&lt; Directory&gt; httpd.conf中的设置。当您这样做时,您可以更改回AllowOverride none并获得显着的性能提升。