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

Php 如何从url中删除控制器名称,使其在codeigniter中保持干净,php,codeigniter,mod-rewrite,clean-urls,Php,Codeigniter,Mod Rewrite,Clean Urls,我有以下url http://localhost/ci/site_controller/home 我想从url中删除站点\u控制器控制器,导致 http://localhost/ci/home 如何在CodeIgniter中执行此操作 注意:如果你问我做了什么,我会比刚才在谷歌上搜索做的更多,因为我不知道如何使用mod_rewrite 编辑 我在routes.php中有这个 $route['default_controller'] = "site_controller/home"; $ro

我有以下url

http://localhost/ci/site_controller/home
我想从url中删除
站点\u控制器
控制器,导致

 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

这可能有助于为CodeIgniter项目定义默认控制器

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

$route['default_controller'] = 'site_controller';

尝试使用routes文件重新映射url的


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

在config/routes.php文件中,只需如下设置每个页面:

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

假设您当前拥有url
http://localhost/ci/site_controller/home
您只需在
/application/config/routes.php

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


如果控制器的名称空间为
/application/controllers/ci/
请从路由中删除
'ci'
。这是您的项目名称,从来都不是必需的。路由始终从控制器级别开始:

$route['home'] = "site_controller/home";
会有用的。然而,更重要的是。。你确定你的设计是正确的吗?为什么不让
home
成为控制器呢?创建一个
/application/controllers/home.php
,您就可以使用
http://localhost/ci/home


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

我刚刚在这个链接中找到了解决方案,它适合我:

希望它能帮助你:)

这对我有帮助。在“
routes.php
”中,我添加了以下内容:

$route['(:any)]=“默认控制器/$1”


如果您的.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时,上面的行调用controllerWeb的函数signin()

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

$route['p/(:any)'] = 'web/p/$1';
此行调用控制器Web中的函数p(),该函数有一个参数。函数p()被定义为:

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

我希望这有帮助:)

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

$urlParam = $this->uri->segment_array()[1];
$rout[$urlParam] = "page/index";
结果:http://localhost:8080/index.php/sometext


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

可能重复和许多其他我得到404页未找到错误,在没有控制器的情况下写入url。如果url中没有index.php,您显然需要重新编写mod_。您确定
http://localhost/ci/site_controller/home
实际有效?您能发布您的.htaccess文件吗?请查看问题中的.htaccess。您的基本url设置为什么?然后,从该控制器运行的任何页面都将是/ci/home/whatever。或者你建议为每个页面创建一个控制器?我创建所有应用程序的方式——CodeIgniter文档建议的方式就是这样做。为页面使用控制器,当您需要与该页面交互时(例如POST数据),请在该页面的控制器中使用单独的功能
controllers/about.php
controllers/home.php
controllers/contact.php
,等等-是一种有效的设计。公平地说,我更喜欢将类似的页面分组在一个控制器中,但我们的网站有相当多的页面,所以我可以按照自己的方式来做。这实际上只是一个设计偏好的问题。两者都可以。由您决定是让控制器名称作为入口点并避免写入路由,还是让函数名称作为入口点并写入路由。A建议前者,但由你决定。当您想开始设置控制器上的权限时,后一种方法可能会出现问题。构造器函数通常可以用于前者,但它不适合您提出的方式。我有单独的基本控制器,我的控制器、用户控制器、管理员控制器,然后我只处理这些主组中的单个角色和常规控制器确定这应该有效:$route['^(:any)(/:any)?$']=“MainCtrl/$0”;
public function p($param = "none") {
    echo $param;
}
$urlParam = $this->uri->segment_array()[1];
$rout[$urlParam] = "page/index";