.htaccess - DirectoryIndex似乎没有任何效果

时间:2017-12-04 22:05:16

标签: php apache .htaccess codeigniter

我正在尝试在我的CodeIgniter安装的根目录中调整.htaccess文件,因此我不必在通向我的控制器的所有URL中包含index.php。

这是我的.htaccess文件的内容:

<IfModule authz_core_module>
    Require all granted
</IfModule>
<IfModule !authz_core_module>
    Deny from all
</IfModule>

DirectoryIndex login.php

RewriteEngine On
RewriteCond $1 !^(index\.php)
RewriteCond $(REQUEST_FILENAME) !-f
RewriteCond $(REQUEST_FILENAME) !-d
RewriteRule ^(.*)$ ./index.php/$1

正如您所看到的,它是默认的.htaccess文件,其中包含一些mod_rewrite的重写规则以及附加到其上的DirectoryIndex指令。启用了Mod_rewrite(我已经使用apachectl -M检查了这个。)

现在,我在Ubuntu 16.04 LTS上运行Apache 2.4.18,我正在使用CodeIgniter 3.1.6。问题是当我输入没有URL时,我被重定向到CodeIgniters index.php而不是我想要的login.php。我宁愿让DirectoryIndex指令工作,而不是将login.php的内容转移到index.php中,原因很明显。我的mod_rewrite规则用于将URL路由到“通过”index.php的现有文件,而不必在其URL中包含index.php。这样,我的网址更干净,但我仍然可以使用CodeIgniter的设施。

我的主Apache配置显然允许我使用.htaccess文件(因为CodeIgniter也需要这个)并且URL重写指令工作得很好。为什么DirectoryIndex似乎没有做任何事情,无论我把它放在文件里面?

2 个答案:

答案 0 :(得分:0)

检查AllowOverride指令是否设置为All - 它控制.htaccess文件是否有任何电源。

有关于如何设置它的答案:How to Set AllowOverride all

答案 1 :(得分:0)

我解决了问题,但没有以优雅的方式解决。

在我看来,当你在DocumentRoot的子目录的.htaccess文件中使用它时,mod_rewrite无法正常工作。

我的CodeIgniter安装位于DocumentRoot内部名为“CodeIgniter”的子目录中。我制作了两个.htaccess文件:

的DocumentRoot / htaccess的:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %1 !^index.php
RewriteRule ^(.*)$ /CodeIgniter/index.php [L]

的DocumentRoot /笨/ htaccess的:

<IfModule authz_core_module>
    Require all granted
</IfModule>
<IfModule !authz_core_module>
    Deny from all
</IfModule>
Options FollowSymLinks
DirectoryIndex login.php

这似乎正在为我做伎俩

故事的道德:使用位于DocumentRoot中直接的.htaccess中的mod_rewrite进行所有网址重写