如何从url中删除控制器名称,使其在codeigniter中保持干净

时间:2012-10-12 16:10:15

标签: php codeigniter mod-rewrite clean-urls

我有以下网址..

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

9 个答案:

答案 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功能。

你让事情变得复杂。根本不需要路线。