我使用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访问其他页面。
答案 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]