代码点火器控制器无法访问


CodeIgniter controllers unreachable

我使用Xampp和CodeIgniter开发了一个Web应用程序。 处理干净路由的最佳方法是将 VirtualHost 设置为指向包含 xampp/apache/conf/httpd.conf 中的项目的文件夹,然后在 route.php 文件中使用路由路由,例如

$route['page1'] = "Page1Controller/page1Function";

我使用 href 或这样的标头,使用 root 作为基本文件夹:

href="/page1"

所有这些都在本地运行良好,我从不使用base_url()或此类功能。

切换到生产服务器,除了我的个人文件夹和子文件夹之外,我显然没有任何权限,所以当我执行它时,根文件夹成为所有域的根,而不仅仅是我的项目文件夹。

我尝试了base_url()但它不起作用,即使不使用$route也找不到页面。

有没有办法在不重构代码中的所有链接的情况下处理这个问题,或者通过重构来做到这一点的方法是什么?

编辑

我现在不使用"/page1",而是使用"./page1"来访问索引.php文件夹的位置。 但是,我仍然无法使用php或html/js访问其他页面。

假设路由在本地工作,以下是我为使其适应生产服务器而采取的步骤。

1 - 控制器和视图的首字母大写

CodeIgniter 请求在控制器和视图的命名中使用大写字母,因此即使路由在 Windows 上运行,Linux 区分大小写也需要在类标题和 route.php 文件中的引用中正确命名。

2 - 使用 './' 而不是'/'

由于应用程序的部署发生在子域中,因此根对应于域本身,而不是索引.php所在的子域,并且可以通过'./'访问(参见SO问题)。

3 - 在 .htaccess 文件中硬编码子域路径

按照本文档,我执行了更正标准 .htaccess 文件的步骤,使其与服务器上的子目录一起使用。 标准变体只是从此规则中删除'/'

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

这导致

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

但是,这还没有在我的服务器上解决它,我不得不对路径进行硬编码:

如果您从子目录运行 EE 并且它仍然不起作用 删除斜杠后,您可能需要在 您的重写规则。例如,如果子文件夹名为 testing, 改变:

RewriteRule (.*?)index'.php/*(.*) /$1$2 [R=301,NE,L]

自:

RewriteRule (.*?)index'.php/*(.*) testing/$1$2 [R=301,NE,L]

并更改:

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

自:

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