[英]CodeIgniter Route Problem with Regex
我在使用CodeIgniter路由功能時遇到了一些問題。
我使用URI_Language_Identifier擴展名,並且我想將對“ lang / login”的所有請求(例如,en / login或de / login)重新路由到用戶/登錄名,我試圖按以下方式使用routes函數,但它不起作用:
$route['(\\w{2})/login'] = "/user/index";
但這確實起作用:
$route['en/login'] = "/user/index";
$route['de/login'] = "/user/index";
但是工作版本非常糟糕,它將產生冗余代碼,如果要添加新語言,則必須更改很多代碼。
我希望有人像往常一樣有一個明智的答案。 提前致謝。
或嘗試$ route [':any / login'] =“ / user / index”;
真正的錯誤與解決方案
嘿,即使有人遇到相同的問題,我也發現了真正的錯誤。
這是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'];
無論如何,感謝您在這篇文章中提供的所有幫助。 你很棒。
任何使用RegEx的路由都必須放在scaffolding_trigger
和default_controller
的保留路由之后,這很可能是您的問題。
嘗試類似
$route['.+/login'] = "/user/index";
因為您仍然不需要匹配的語言代碼。 我想您的(\\w{2})
表達式的解釋有問題,也許您還必須嘗試以下方法:
$route['[a-z]+/login'] = "/user/index";
這三個都不適合我。
僅提供一些更多信息:我正在本地服務器上運行它。
我也有一個帶以下代碼的.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錯誤。
希望你有更多的想法。 謝謝。
這是處理路由的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";
以下對我有用(提供的語言始終為小寫):
$route['([a-z]{2})/login'] = '/user/index';
正如Watain所述,因為您不需要匹配的lang。 代碼,您可以刪除'('和')'
$route['[a-z]{2}/login'] = '/user/index';
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.