【问题标题】:.htaccess not being read properly from DocumentRoot dir.htaccess 未从 DocumentRoot 目录正确读取
【发布时间】:2013-02-20 07:43:10
【问题描述】:

我在 /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 中创建第二个 .htaccess 文件并将这一行放入其中:

ErrorDocument 404 /index.php

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

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

【问题讨论】:

    标签: apache .htaccess codeigniter mod-rewrite centos


    【解决方案1】:

    找到问题了。

    在 httpd.conf 我改变了

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

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

    这很难发现,因为该目录设置中有大量的 cmets,并且它掩盖了它。 .conf 文件中还有许多其他 AllowOverride All 语句,这让我觉得我已经设置了设置。

    但等等,还有更多!

    我还从 IRC 上一个名为“thumbs”的人那里得知,我应该将 .htaccess 文件的内容直接放入 httpd.conf 的 设置中。当您这样做时,您可以改回 AllowOverride none 并获得显着的性能提升。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-04-16
      • 1970-01-01
      • 2019-03-03
      • 1970-01-01
      • 1970-01-01
      • 2012-01-15
      • 2017-06-22
      相关资源
      最近更新 更多