CodeIgniter控制器无法访问

时间:2016-02-29 04:37:38

标签: php apache codeigniter xampp

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

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

我使用root作为基本文件夹使用href或header这样:

href="/page1"

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

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

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

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

修改

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

1 个答案:

答案 0 :(得分:1)

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

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

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

2 - 使用'./'代替'/'

由于应用程序的部署发生在子域中,因此根对应于域本身,而不是index.php所在的子域,以及'./' (cf. SO question)可访问的子域。

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

doc之后,我执行了更正标准.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]