代码之家  ›  专栏  ›  技术社区  ›  Lukas Oppermann

带有正则表达式的CodeIgniter路由问题

  •  2
  • Lukas Oppermann  · 技术社区  · 16 年前

    我在使用CodeIgniter路由函数时遇到了一个小问题。

    URI_Language_Identifier extension

    $route['(\w{2})/login'] = "/user/index";

    但是,这确实有效:

    $route['en/login'] = "/user/index";
    $route['de/login'] = "/user/index";

    但是工作版本非常糟糕,它会产生冗余代码,如果你想添加一种新的语言,你必须做很多改变。

    7 回复  |  直到 16 年前
        1
  •  3
  •   P.M    16 年前

    或者尝试$route[':any/login']=“/user/index”;

        2
  •  3
  •   Lukas Oppermann    16 年前

    真正的错误&解决方案

    如果有人有同样的问题,我发现了真正的错误。

    是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'];

    无论如何,谢谢你在这篇文章中的帮助。你太棒了。

        3
  •  1
  •   Zack    16 年前

    任何使用正则表达式的路由 scaffolding_trigger default_controller 这很可能是你的问题。

        4
  •  0
  •   watain    16 年前

    试试像这样的东西

    $route['.+/login'] = "/user/index";
    

    我想你的解释有问题 (\w{2}) 表情,也许你还得试试这样:

    $route['[a-z]+/login'] = "/user/index";
    
        5
  •  0
  •   Lukas Oppermann    16 年前

    这三个都不适合我。

    只是提供一些更多的信息:我正在本地服务器上运行它。

    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错误。

        6
  •  0
  •   Xeoncross    16 年前

    以下是处理路由的正则表达式部分的代码:

        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";
    
        7
  •  0
  •   Maurice Kherlakian    16 年前

    以下内容适用于我(前提是语言始终为小写):

    $route['([a-z]{2})/login'] = '/user/index';
    

    $route['[a-z]{2}/login'] = '/user/index';