Php 带有正则表达式的CodeIgniter路由问题
我在使用CodeIgniter路由函数时遇到了一个小问题 我使用了,我想改变所有的路线 对用户/login的“lang/login”(例如en/login或de/login)请求我尝试按如下方式使用routes功能,但不起作用:Php 带有正则表达式的CodeIgniter路由问题,php,url,codeigniter,routes,Php,Url,Codeigniter,Routes,我在使用CodeIgniter路由函数时遇到了一个小问题 我使用了,我想改变所有的路线 对用户/login的“lang/login”(例如en/login或de/login)请求我尝试按如下方式使用routes功能,但不起作用: $route['(\w{2})/login']=“/user/index” 但是,这确实有效: $route['en/login']=“/user/index” $route['de/login']=“/user/index” 但是工作版本非常糟糕,它会产生冗余代码,如
$route['(\w{2})/login']=“/user/index”代码>
但是,这确实有效:
$route['en/login']=“/user/index”
$route['de/login']=“/user/index”代码>
但是工作版本非常糟糕,它会产生冗余代码,如果你想添加一种新的语言,你必须做很多改变
我希望有人能像往常一样给出明智的答案。提前谢谢。试试类似的方法
$route['.+/login'] = "/user/index";
因为你不需要匹配的语言代码。
我猜您的(\w{2})
表达式的解释有问题,可能您还需要尝试以下方法:
$route['[a-z]+/login'] = "/user/index";
任何使用RegEx的路由都必须放置在scaffolding\u trigger
和default\u controller
的保留路由之后,这很可能是您的问题。或尝试$route[':Any/login']=“/user/index” 这三个都不适合我
只是提供一些更多的信息:我正在本地服务器上运行它
我还有一个.htaccess文件,其代码如下:
AddCharset utf-8.css.html.xhtml
选项+以下符号链接
重新启动发动机
重写基础/
1美元^(索引\.php | images | css | robots\.txt)
重写规则^(.*)$/www/veare/index.php/$1[L]
我得到一个404错误
希望你有更多的想法。谢谢。以下是处理路由的正则表达式部分的代码:
//在路由阵列中循环查找通配符
foreach ($this->routes as $key => $val)
{
// Convert wild-cards to RegEx
$key = str_replace(':any', '.+', str_replace(':num', '[0-9]+', $key));
// Does the RegEx match?
if (preg_match('#^'.$key.'$#', $uri))
{
// Do we have a back-reference?
if (strpos($val, '$') !== FALSE AND strpos($key, '(') !== FALSE)
{
$val = preg_replace('#^'.$key.'$#', $val, $uri);
}
$this->_set_request(explode('/', $val));
return;
}
}
我会试试看
$route['\w\w/login'] = "/user/index";
以下内容适用于我(前提是语言始终为小写):
正如Watain提到的,因为您不需要匹配的lang.代码,所以可以删除“(”and')”
真正的错误和解决方案
哎,,
如果有人有同样的问题,我发现了真正的错误
是route.php中的一行
//路由示例:http://domain.tld/en/controller => http://domain.tld/controller
$route['(\w{2})/(.*)]='$2'
$route['(\w{2})]=$route['default_controller']代码>
这是分机的
您需要将所有路线放在前面,如下所示:
$route['(\w{2})/signup']=“用户/注册”
//路线示例:http://domain.tld/en/controller => http://domain.tld/controller
$route['(\w{2})/(.*)]='$2'
$route['(\w{2})]=$route['default_controller']代码>
无论如何,谢谢你在这篇文章中的帮助。你太棒了。这似乎不太管用。你需要我提供更多的信息吗?如果有任何帮助,请让我知道如何更容易地帮助我。谢谢,我想问题是,CI不喜欢我使用正则表达式和普通名称。所以我也需要在正则表达式中告诉“login”。可悲的是,我在正则表达式方面完全是个傻瓜,那么我该怎么做呢?这似乎现在起作用了。我不知道为什么,但正则表达式根本不起作用。无论如何,谢谢你。
$route['([a-z]{2})/login'] = '/user/index';
$route['[a-z]{2}/login'] = '/user/index';