在codeigniter中,我想有一个URL段不被考虑。
example.com/app/dev1/controller/function/id
example.com/app/dev2/controller/function/id
基本网址是
baseUrl = example.com/app
当我使用这种类型的 url 时,代码点火器将"dev1"视为控制器,"控制器"作为函数,因此我得到页面未找到的错误。
我想知道我是否可以编码不将第一个参数视为控制器,并且它从第二个参数开始考虑。
我无法添加基本网址,因为它不是常量,我们可以有 en、fr、nl 等,所以在这种情况下我们有什么帮助的,我不想添加查询字符串"?"。 我们可以使用 .htaccess 做任何事情吗
假设网址如下所示 www.paintes.com/painters-in-chennai: 然后路线可以像下面这样
$route['painters-in-(:any)'] ='index/paintersIn/$1';
在index.php控制器中,我将能够像以下一样接收钦奈
function paintesIn($city_name)
{
echo $city_name //OUTPUT WILL BE "chennai"
}
如果 url 像 www.paintes.com/painters-in-mumbai ,则输出将是孟买
根据您的要求,URL如下所示:www.paintes.com/mumbai-painters 然后你可以像下面这样写
$route['(:any)-painters'] ='index/paintersIn/$1';
您必须正确配置 CodeIgniter 路由。例:
$route['dev1/controller/fun/(:num)'] = "dev1/controller/fun/index/$1";
请参阅 https://blog.biernacki.ca/2011/12/codeigniter-uri-routing-issue-with-controller-folders/
您可能希望在路由中执行以下操作
$route['dev1/(:any)'] ='dev1/$1';
$route['dev1/(:any)/(:any)'] ='dev1/$1/$2';
$route['dev1/(:any)/(:any)/(:any)'] ='dev1/$1/$2/$3';
很少Codeigniter
将文件夹名称视为控制器,请尝试重命名文件夹。
否则,上述解决方案应该有效。
您可以像这样添加 URI 路由正则表达式以跳过dev
部分并直接转到所需的控制器:
$route['dev(:num)/([a-z]+)/([a-z]+)/(d+)'] = '$2/$3/$4'; // rule to match method with parameter
$route['dev(:num)/([a-z]+)/([a-z]+)'] = '$2/$3'; // rule to match method without parameter
或者,如果您没有通用的dev
URI 段,则可以使用以下规则:any
:
$route['(:any)/([a-z]+)/([a-z]+)/(d+)'] = '$2/$3/$4'; // rule to match method with parameter
$route['(:any)/([a-z]+)/([a-z]+)'] = '$2/$3'; // rule to match method without parameter
我们将在"/application/core"文件夹中创建新文件"MY_Router.php",内容如下
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
class MY_Router extends CI_Router {
protected function _parse_routes()
{
// do logic you needed
unset($this->uri->segments[1]);
// Return default function
return parent::_parse_routes();
}
}