我正在尝试在我的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似乎没有做任何事情,无论我把它放在文件里面?
答案 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进行所有网址重写