URL重写(WAMP):删除";index.php“;来自URL(对于具有自定义文件夹结构的Codeigniter项目)
首先,我知道这个问题可能已经被问了150万次,于是我用谷歌搜索了一下。URL重写(WAMP):删除";index.php“;来自URL(对于具有自定义文件夹结构的Codeigniter项目),php,apache,.htaccess,codeigniter,url-rewriting,Php,Apache,.htaccess,Codeigniter,Url Rewriting,首先,我知道这个问题可能已经被问了150万次,于是我用谷歌搜索了一下。 我已经阅读并尝试了很多建议,但问题仍然存在 这是我们的第一个内部CI项目。 使用非标准(在CI世界中)目录树创建了一个框架“项目”,以更好地匹配我们其他现有项目的文件结构。 事情是这样的: ../ /www -index.php /应用程序 -/config -/控制器 -/…等 -/lib --/供应商 --/CODE点火器 ---/2-1-2 --/系统 ----/…等 -/library -/views -/…等等 我
我已经阅读并尝试了很多建议,但问题仍然存在 这是我们的第一个内部CI项目。
使用非标准(在CI世界中)目录树创建了一个框架“项目”,以更好地匹配我们其他现有项目的文件结构。
事情是这样的: ../
/www
-index.php
/应用程序
-/config
-/控制器
-/…等
-/lib
--/供应商
--/CODE点火器
---/2-1-2
--/系统
----/…等
-/library
-/views
-/…等等 我将它复制到我的机器(WAMP)并测试了几个控制器。
一切似乎都很好。唯一的问题是url中仍然需要index.php。
我希望能够使用http://localhost/project/controller/method,而不是需要http://localhost/project/index.php/controller/method 我确认我的http.conf已经为wamp/www提供了
AllowOverrride All
,并且我在/www目录中添加了一个.htaccess
文件。。。无效:(我有这个项目的别名
### \wamp\alias\bomProject.conf ###
Alias /bomProject/ "c:/wamp/NetBeansProjects/bomProject/www/"
<Directory "c:/wamp/NetBeansProjects/bomProject/www/">
Options Indexes FollowSymLinks MultiViews
AllowOverride all
Order allow,deny
Allow from all
</Directory>
###\wamp\alias\bomProject.conf###
别名/bomProject/“c:/wamp/NetBeansProjects/bomProject/www/”
选项索引跟随符号链接多视图
允许超越所有
命令允许,拒绝
通融
此别名允许我在以下位置成功浏览项目:http://localhost/bomproject.我已将/config/config.php中的
$config['index_page']
设置为'
我还尝试更改$config['base\u url']=''
到
$config['base\u url']='http://localhost/bomProject/“
在config.php中…两者都不起作用
我的怀疑是,这个问题归结到我们的目录树,但是我对htaccess和regex缺乏经验,不知道如何解决它。
[编辑]:
@chris clower向我介绍了config/routes.php,所以我读了一点。
很高兴知道这一点!我非常感激他们,也很喜欢与他们一起玩……只是根据文档(至少我是如何理解的),我认为路线不是解决我问题的办法。
当尝试“localhost/bomProject/{controller}”…其中{controller}显然是一个真实的控制器名…我仍然得到404错误:“未找到-请求的URL/wamp/NetBeansProjects/bomProject/www/index.php/{controller}在此服务器上未找到。”
[/EDIT]:
非常感谢您的帮助。您需要查看
/application/config/routes.php
并在那里添加您的路由,如下所示:
$route['default_controller'] = 'index';
$route['admin'] = 'admin/index/';
$route['admin/(:any)'] = 'admin/$1';
$route['forum'] = 'forum/index/';
$route['(:any)'] = 'index';
$route['404_override'] = '';
至于您的
.htaccess
,它看起来不错,不需要对此进行任何更改。您需要查看/application/config/routes.php
并在其中添加路由,类似于以下内容:
$route['default_controller'] = 'index';
$route['admin'] = 'admin/index/';
$route['admin/(:any)'] = 'admin/$1';
$route['forum'] = 'forum/index/';
$route['(:any)'] = 'index';
$route['404_override'] = '';
至于您的
.htaccess
,它看起来很好,不需要对此进行任何更改。@mOrloff应该注意,在本例中,上面需要一个用于管理员的控制器,另一个用于应用程序/控制器
中的论坛
。好的,我们有一个名为“沙盒”的示例控制器使用两种方法,“index”和“tester”…我的路由为$route['default_controller']='index';$route['sandbox']='sandbox/tester/';$route['404_override']='”;
调用“/sandbox”时,我能够控制我的着陆位置控制器…但它仍然需要在url中使用*index.php…否则我会得到一个404…想法???@mOrloff$route['sandbox']='sandbox/index/';$route['sandbox/(:any)]='sandbox/$1';
谢谢。虽然请求确实得到了正确的路由,但url中仍然需要INDEX.PHP。我是否遗漏了什么?请尝试在.htaccess文件中INDEX.PHP的开头添加一个/
,其中有:RewriteRule^(.*)$INDEX.PHP/$1[L]
,如下所示:RewriteRule^(.*)$/INDEX.PHP/$1[L]
。此外,在该行之前,请尝试添加以下内容:RewriteCond$1!^(index\.php | images | robots\.txt)
。我在这里理解,但值得一试。@mOrloff应该注意的是,在这个例子中,上面需要一个控制器,用于管理,另一个用于论坛,位于应用程序/controllers/
。好的,我们有一个名为“sandbox”的示例控制器,它有两种方法,“index”和“tester”…使用我的路由作为$route['default_controller']='index';$route['sandbox']='sandbox/tester/';$route['404_override']='';
调用“/sandbox”控制器时,我能够控制我在哪里着陆…但它仍然需要在url中使用*index.php…否则我会得到一个404…想法???@mOrloff$route['sandbox']='sandbox/index/';$route['sandbox/(:any)]='sandbox/$1';
感谢您的支持。虽然请求确实得到了正确的路由,但url中仍然需要index.PHP。我缺少什么吗?请尝试在.htaccess文件中index.PHP的开头添加一个/
,其中有:RewriteRule^(.*)$index.PHP/$1[L]
,比如:RewriteRule^(.*)$/index.php/$1[L]
。另外,在这一行之前,尝试添加以下内容:RewriteCond$1!^(index\.php | images | robots\.txt)
。我理解了这里,但值得一试。