0

在我的网络根目录(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 not found 错误:

The requested URL /index.php/events was not found on this server.

编辑:我通过将最后一行 /var/www/vges.htaccess 更改为:

RewriteRule ^(.*)$ test/index.php/$1 [L]

虽然我怀疑如果我要将此测试项目上传到服务器,它不是子目录,那么我可能会收到错误。最好的解决方案是什么?我应该在我的 .htaccess 文件中更改什么

  1. 我可以在本地机器上有子目录
  2. 当我将它们作为单个项目(例如测试项目)上传到服务器时,我不必修改 .htaccess 文件。

谢谢。

4

1 回答 1

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(请记住正确转义正则表达式字符,例如句点)。如果RewriteBaseCI 位于子目录中,则规则肯定会派上用场。您也不需要 2.1.x 的系统和应用程序文件夹引用,因为这些文件夹有自己的 .htaccess 文件阻止对它们的访问。

于 2013-02-27T05:06:28.960 回答