在我的网站根目录(var / www)中,我的.htaccess文件中包含以下内容:
RewriteCond %{REQUEST_URI} ^system.*
RewriteCond $1 !^(index\.php|vges|images|robots\.txt)
RewriteCond %{REQUEST_URI} ^application.*
RewriteRule ^(.*)$ /test/index.php?/$1 [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?/$1 [L]
然后我有一个带有codeigniter项目的子目录(/ var / www / test)。它还有一个.htaccess文件,其中包含以下内容:
RewriteEngine On
RewriteCond $1 !^(index\.php|quiz|vges|buddy|css|fonts|img|images|js|robots\.txt)
RewriteRule ^(.*)$ /index.php/$1 [L]
当我访问localhost时,我可以查看测试目录,当我进入测试目录时,我会显示默认的控制器视图。但是当我访问localhost / test / controller时,我收到404错误的错误:
The requested URL /index.php/events was not found on this server.
编辑:我通过将最后一行/var/www/vges.htaccess更改为:
找到了解决方案RewriteRule ^(.*)$ test/index.php/$1 [L]
虽然我怀疑是否要将此测试项目上传到服务器,但它不是子目录,我可能会收到错误。什么是最好的解决方案?什么应该 我更改了我的.htaccess文件
感谢。
答案 0 :(得分:1)
首先,.htaccess文件适用于它们所在的目录以及每个子目录。您的CodeIgniter特定规则应位于var/www/test/
CI目录中 - 通常是CI的index.php文件所在的位置。
其次,你的根.htaccess有点奇怪。 RewriteCond
条件会累积,直到RewriteRule
规则触发,然后重置它们。您的两个%{REQUEST_URI}
条件相互冲突,因为URI无法同时启动。我不确定这个.htaccess规则是做什么的,但是如果从根开始的URL与你的CI应用程序没有关系,我认为首先不必将它放在那里。如果不知道您的目录结构以及您希望网站如何运作,我无法肯定地说。
kjetilh是对的 - 除非您的环境共享完全相同的设置,否则.htaccess不太可能具有普遍功能。您最好的选择是尽可能简单地启动它们,并根据需要进行修改。 CI 2.1.x的良好启动.htaccess类似于:
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond $1 !^(favicon\.ico|robots\.txt)
RewriteRule ^(.*)$ index.php/$1 [L]
您可以添加资产目录或您不希望在第三个RewriteCond
中重定向的任何路径(请记住正确转义正则表达式字符,例如句点)。如果CI位于子目录中,RewriteBase
规则肯定会派上用场。您也不需要2.1.x的系统和应用程序文件夹引用,因为这些文件夹有自己的.htaccess文件阻止访问它们。