8

我有以下网址..

http://localhost/ci/site_controller/home

我想从 url 中删除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
4

9 回答 9

10

您可以为每个 url 设置路由:

在您的 config/routes.php 文件中,只需像这样设置每个页面:

$route['ci/home'] = "ci/site_controller/home";
于 2012-10-12T16:17:53.300 回答
3

这可能会帮助您为您的 CodeIgniter 项目定义一个默认控制器。

https://codeigniter.com/user_guide/general/controllers.html#defining-a-default-controller

例如,在您的情况下,打开您的 application/config/routes.php 文件并设置此变量:

$route['default_controller'] = 'site_controller';
于 2012-10-12T16:12:44.017 回答
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/

于 2012-10-12T16:20:27.090 回答
2

这对我有帮助。在“ routes.php”中我添加了这个:

$route['(:any)'] = "default_controller/$1";

于 2017-06-01T13:38:50.003 回答
1

尝试使用路由文件重新映射 url

http://ellislab.com/codeigniter/user_guide/general/routing.html

于 2012-10-12T16:13:22.213 回答
0

我刚刚在此链接中找到了解决方案,它对我有用:http ://ellislab.com/forums/viewthread/148531/

$route['^(page1|page2|page3|page4)(/:any)?$'] = "YOURCONTROLLERNAME/$0";

希望它可以帮助你:)

于 2014-02-09T01:30:46.563 回答
0

如果您的 .htaccess 文件是这样设置的(或类似的),那么 index.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]

而你的codeigniter代码直接位于html文件夹中......

要从 URL 中删除控制器名称,请编辑 application/config/routes.php 添加如下行:

$route['signin'] = 'web/signin';

当用户请求 yoursebsite.com/signin 时,上面的行调用控制器Web的函数 signin ()

要将变量传递给所述函数,请执行以下操作:

$route['p/(:any)'] = 'web/p/$1';

此行调用控制器Web中的函数p(),该函数有一个参数。函数p()定义为:

public function p($param = "none") {
    echo $param;
}

我希望这有帮助 :)

于 2020-02-01T10:45:43.617 回答
0

如果您想从 Codeigniter 3.x 中的 URL 中删除控制器名称,这非常简单,在我的例子中,URL 是:http://localhost:8080/index.php/page/sometext 其中“Page”是控制器名称打开应用程序/config/routs.php

$urlParam = $this->uri->segment_array()[1];
$rout[$urlParam] = "page/index";

结果:http://localhost:8080/index.php/sometext

我向你保证,它会起作用的。测试 100%。

于 2020-09-21T13:30:01.020 回答
-1

'ci'从您的路线中删除。这是您的项目名称,从不需要。路由总是在控制器级别开始:

$route['home'] = "site_controller/home";

将工作。然而,更重要的是......你确定你的设计是正确的吗?为什么不让home 自己成为一个控制器?创建一个/application/controllers/home.php,您将能够使用 访问它的index()功能http://localhost/ci/home

你把事情复杂化了。根本不需要路线。

于 2012-10-12T17:37:51.483 回答