使用CodeIgniter路由功能时遇到了一些问题。
我使用URI_Language_Identifier extension,我想重新路由所有 对用户/登录的“lang / login”(例如en / login或de / login)的请求我尝试使用如下的路由功能,但它不起作用:
$route['(\w{2})/login'] = "/user/index";
$route['en/login'] = "/user/index";
$route['de/login'] = "/user/index";
但是工作版本非常糟糕,它会产生冗余代码,如果你想添加新语言,你必须改变很多。
我希望有人像往常一样聪明地回答。提前谢谢。
答案 0 :(得分:3)
或尝试$ route [':any / login'] =“/ user / index”;
答案 1 :(得分:3)
真正的错误&溶液强>
嘿 如果有人遇到同样的问题,我发现了真正的错误。
是route.php中的一行
//route example: http://domain.tld/en/controller => http://domain.tld/controller
$route['(\w{2})/(.*)'] = '$2';
$route['(\w{2})'] = $route['default_controller'];
这是扩展名。
您需要在此之前放置所有路线,如下所示:
$route['(\w{2})/signup'] = "user/signup";
//route example: http://domain.tld/en/controller => http://domain.tld/controller
$route['(\w{2})/(.*)'] = '$2';
$route['(\w{2})'] = $route['default_controller'];
无论如何,感谢这篇文章中的所有帮助。你很棒。
答案 2 :(得分:1)
使用RegEx 的所有路由必须放置在scaffolding_trigger
和default_controller
的保留路由之后,这很可能是您的问题。
答案 3 :(得分:0)
尝试类似
的内容$route['.+/login'] = "/user/index";
因为您无论如何都不需要匹配的语言代码。
我想你的(\w{2})
表达式的解释有些不对劲,也许你还需要尝试类似的东西:
$route['[a-z]+/login'] = "/user/index";
答案 4 :(得分:0)
这3个都不适合我。
提供更多信息:我在本地服务器上运行它。
我还有一个带有以下代码的.htaccess文件:
AddCharset utf-8 .css .html .xhtml
Options +FollowSymlinks
RewriteEngine on
RewriteBase /
RewriteCond $1 !^(index\.php|images|css|robots\.txt)
RewriteRule ^(.*)$ /www/veare/index.php/$1 [L]
我收到404错误。
希望你有更多的想法。感谢。
答案 5 :(得分:0)
以下是处理路由的REGEX部分的代码:
//遍历路径数组寻找通配符
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";
答案 6 :(得分:0)
以下适用于我(假设语言始终为小写):
$route['([a-z]{2})/login'] = '/user/index';
正如Watain所说,因为你不需要匹配的郎。代码,您可以删除'('和')'
$route['[a-z]{2}/login'] = '/user/index';