如何将CodeIgniter URL转换为用户友好的URL?

如何将CodeIgniter URL转换为用户友好的URL?,codeigniter,Codeigniter,我已经探讨了很多关于这方面的问题和文章,但我找不到如何做到这一点 我正在做一个网站,提供手机、平板电脑、电视等多种产品的规格说明。以下是我所做的: 控制器-规格(创建和显示所有产品的规格) 方法-显示(获取所选型号的详细规格并显示) 方法-索引(列出表中存储的所有模型的名称。这是我构建锚链接的地方) Display方法接受三个参数(1、2、3)。 1-产品类型(手机、平板电脑、电视等) 2-型号Slug(iphone-6、galaxy-tab-s3、bravia-kdl-50w800d等) 3-

我已经探讨了很多关于这方面的问题和文章,但我找不到如何做到这一点

我正在做一个网站,提供手机、平板电脑、电视等多种产品的规格说明。以下是我所做的:
控制器-规格(创建和显示所有产品的规格)
方法-显示(获取所选型号的详细规格并显示)
方法-索引(列出表中存储的所有模型的名称。这是我构建锚链接的地方)

Display方法接受三个参数(1、2、3)。
1-产品类型(手机、平板电脑、电视等)
2-型号Slug(iphone-6、galaxy-tab-s3、bravia-kdl-50w800d等)
3-型号ID(1、4、13等)

我现在的URL是这样的:
localhost/sitename/specs/display/phones/iphone-6/1
localhost/sitename/specs/display/tables/galaxy-tab-s3/4
localhost/sitename/specs/display/tv/bravia-kdl-50w800d/13

我想要实现的是如下URL:
localhost/sitename/iphone-6
localhost/sitename/galaxy-tab-s3
localhost/sitename/bravia-kdl-50w800d

我不介意重组我的表/控制器/方法或其他任何东西,如果这可以通过使用任何方法实现的话

感谢您的阅读。

编辑:
Route.php

$route['default_controller'] = 'Specs/index';
$route['404_override'] = 'Errors/show_404';
$route['translate_uri_dashes'] = FALSE;
这就是我构建锚链接的方式(view_file->index.php,从index方法调用):


我可以通过route.php中的以下代码获得所需的URL。唯一的问题是我无法使“urlController/urlMethod”在函数中返回一个可以分配给$result变量的值

$route['(:any)'] = function ($1)
{
        $result = 'urlController/urlMethod/'.$1;
        return $result;
};

我不知道该怎么做。有人能建议我应该如何调用“urlController/urlMethod”吗?

您可以通过CodeIgniter URI路由实现它。考虑到

localhost/sitename/galaxy-tab-s3

映射到

localhost/sitename/specs/display/tables/galaxy-tab-s3/4

并且,模型id即4,在本例中,对于galaxy选项卡s3是静态的,因为您在简化URL中没有提到任何此类id

我的理解是,对于每个URL localhost/sitename/iphone-6,您需要关于字符串“iphone-6”的三个详细信息。i、 e.产品类型、型号slug、型号id。一种方法可以是写

$route['sitename/(:any)'] = 'routingController/commonRoutingMethod/$1';
在这里,创建一个新的routingController并将一些逻辑写入commonRoutingMethod()方法,该方法采用类似iphone-6的字符串并获取其所有三个详细信息,即产品类型、型号id等,然后使用

header('Location:  http://localhost/sitename/specs/display/$productType/$modelSlug/$modelId/');
注意:只要在routes.php中使用regex match,可能会有更多的前进方式,因为您可以根据产品类型和型号id创建不同的字符串结构,例如p_iphone-6_1或t_galaxy-tab-s3_4


请使用下面的路由代码,来实现它

localhost/sitename/specs/display/phones/iphone-6/1
localhost/sitename/specs/display/tablets/galaxy-tab-s3/4
localhost/sitename/specs/display/tv/bravia-kdl-50w800d/13

localhost/sitename/iphone-6
localhost/sitename/galaxy-tab-s3
localhost/sitename/bravia-kdl-50w800d

$route['(:any)'] = 'specs/display/$1/$1/$1';

如果您需要任何帮助,请告诉我。

您可以分享您的route.php代码以及您单击产品按钮获取产品数据的查看文件吗编辑您的问题并在那里添加您的route.php行。如果您想了解我是如何为产品构建锚定链接的,它是这样的:“echo anchor”(控制器/功能/产品类型/型号段塞/型号id、型号名称)参考此,您需要修改.htaccess文件。在路由中,数组键包含要匹配的URI,而数组值包含它应该被重新路由到的目标。因此,您从此函数返回的任何内容都应该是url。我实际上创建了一个新的表url\u映射,其中包含缩短的url(例如1142-iphone-6和相应的完整url,其中包含控制器、方法和参数,例如(specs/display/phones/iphone-6/1)。此缩短的url包含第一部分中所需的所有ID。我想要的是将此短url作为参数传递给函数,该参数将在每次解析并找到其对应的完整url并将其返回给函数时调用修复程序“urlController/urlMethod”。然后,函数将返回它并映射到$route(:any)。谢谢。这正是我的代码现在正在做的。唯一的区别是您将三个参数加入到commonRoutingMethod()中分为一个,我将它们分开。Specs是处理所有产品类型的常用方法,无论是手机、平板电脑、电视还是其他产品。根据您的建议,生成的URL仍将具有routingController(本例中为Specs)和commonRoutingMethod(本例中显示)的名称。我希望所有的URL都被删除。无论如何,谢谢。这个答案应该会自动将简单URL重定向到复杂URL。你希望这种行为,即支持简单URL,但实际上它会自动重定向到长URL吗?还是希望最终URL是简单的,即不再自动重定向到任何长URL?我确实实现了但带有“header(…)”的这一行实际上重定向到了长url,带我从哪里开始。现在明白了,您实际上不希望最终url变得复杂。而这段代码应该为您的小url提供支持,同时自动将它们重定向到长url
localhost/sitename/specs/display/phones/iphone-6/1
localhost/sitename/specs/display/tablets/galaxy-tab-s3/4
localhost/sitename/specs/display/tv/bravia-kdl-50w800d/13

localhost/sitename/iphone-6
localhost/sitename/galaxy-tab-s3
localhost/sitename/bravia-kdl-50w800d

$route['(:any)'] = 'specs/display/$1/$1/$1';