我有以下网址..
http://localhost/ci/site_controller/home
我想从网址中移除site_controller
控制器,导致...
http://localhost/ci/home
我如何在CodeIgniter中执行此操作?
注意:如果你因为我不知道如何使用mod_rewrite,你会问我尝试过什么,而不是我刚刚搜索谷歌。
修改
我在routes.php中有这个。
$route['default_controller'] = "site_controller/home";
$route['ci/home'] = 'ci/site_controller/home';
$route['404_override'] = '';
但仍无效!
的.htaccess
RewriteEngine On
RewriteBase /ci/
RewriteCond %{REQUEST_URI} ^system.*
RewriteRule ^(.*)$ /index.php/$1 [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L]
ErrorDocument 404 /index.php
答案 0 :(得分:10)
您可以为每个网址设置路线:
在config / routes.php文件中,只需设置如下所示的每个页面:
$route['ci/home'] = "ci/site_controller/home";
答案 1 :(得分:3)
这可能有助于您为CodeIgniter项目定义默认控制器。
https://codeigniter.com/user_guide/general/controllers.html#defining-a-default-controller
例如,在您的情况下,打开您的application / config / routes.php文件并设置此变量:
$route['default_controller'] = 'site_controller';
答案 2 :(得分:2)
假设您当前有您的网址http://localhost/ci/site_controller/home
,您只需在下面写一条明确的路线/application/config/routes.php
$route['ci/home'] = 'site_controller/home';
或
$route['ci/home'] = 'ci/site_controller/home';
如果您的控制器名称空间为/application/controllers/ci/
答案 3 :(得分:1)
尝试使用routes文件重新映射url的
http://ellislab.com/codeigniter/user_guide/general/routing.html
答案 4 :(得分:0)
我刚刚在此链接中找到了解决方案,它适用于我:http://ellislab.com/forums/viewthread/148531/
$route['^(page1|page2|page3|page4)(/:any)?$'] = "YOURCONTROLLERNAME/$0";
希望它可以帮助你:)
答案 5 :(得分:0)
这对我有帮助。在“routes.php
”中,我添加了这个:
$ route ['(:any)'] =“default_controller / $ 1”;
答案 6 :(得分:0)
如果您以这种方式(或类似方式)设置了.htaccess文件,则index.php已被删除...
Uncaught (in promise) DOMException: The play() request was interrupted by a new load request. somelink
您的codeigniter代码直接位于html文件夹中...
要从URL中删除控制器名称,请编辑 application / config / routes.php 添加如下行:
RewriteEngine On
RewriteCond $1 !^(index\.php|application|assets|images|js|css|uploads|favicon.png)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L]
当用户请求yoursebsite.com/signin
时,上述行会调用控制器 Web 的函数 signin()要将变量传递到所述函数中,请执行以下操作:
$route['signin'] = 'web/signin';
此行调用控制器 Web 中的函数 p(),该函数具有一个参数。函数 p()被定义为:
$route['p/(:any)'] = 'web/p/$1';
我希望这会有所帮助:)
答案 7 :(得分:0)
这很简单,如果您想从Codeigniter 3.x中的URL中删除控制器名称。 在我的情况下,URL为: http:// localhost:8080 / index.php / page / sometext 其中“页面”是控制器名称 打开application / config / routs.php
$urlParam = $this->uri->segment_array()[1];
$rout[$urlParam] = "page/index";
结果:http:// localhost:8080 / index.php / sometext
我向您保证,它将成功。测试了100%。
答案 8 :(得分:-1)
从您的路线中删除'ci'
。这是您的项目名称,从不需要。路由总是从控制器级别开始:
$route['home'] = "site_controller/home";
会工作吗?但更重要的是......你确定你的设计是正确的吗?为什么不让home
成为控制器?创建/application/controllers/home.php
,您就可以使用index()
访问http://localhost/ci/home
功能。
你让事情变得复杂。根本不需要路线。