Regex ile CodeIgniter Yol Sorunu

7 Cevap php

Hey guys, I have got a little problem using the CodeIgniter route function.

I use the URI_Language_Identifier extension and I want to reroute all the requests for "lang/login" (e.g. en/login or de/login) to user/login I tried to use the routes function as follows, but it does not work:

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

Bu ancak işi yapar:

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

ancak çalışan bir sürümü oldukça kötü, gereksiz kod üretecek ve size yeni bir dil eklemek istiyorsanız çok değiştirmek zorunda.

Birisi her zamanki gibi, akıllı bir cevabı vardır umarım. Şimdiden teşekkürler.

7 Cevap

ya $ route [': Herhangi / login'] denemek = "/ user / index";

The real error & solution

Hey, just if someone has the same problem, I found the real error.

Route.php bir çizgidir

//route example: http://domain.tld/en/controller => http://domain.tld/controller
$route['(\w{2})/(.*)'] = '$2';
$route['(\w{2})'] = $route['default_controller'];

Bu uzantısı değil.

Aşağıdaki gibi, bu önce tüm yolları koymak gerekir:

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

Zaten bu yazı tüm yardım için teşekkür ederiz. Sen büyük.

RegEx kullanarak herhangi Rotalar must scaffolding_trigger ve default_controller Bu sorun büyük olasılıkla değildir saklıdır yollarının sonra yerleştirilir.

Böyle bir şey deneyin

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

since you don't need the matched language code anyway. I guess something's wrong with the interpretation of your (\w{2}) expression, maybe you'd also have to try something like:

$route['[a-z]+/login'] = "/user/index";

Tüm 3 benim için işe yaramaz.

Sadece biraz daha bilgi sağlayan: Ben bir yerel sunucu üzerinde çalışan duyuyorum.

. Ayrıca ben aşağıdaki kod ile bir htaccess dosyası var:

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]

Ben bir 404 hatası alıyorum.

Eğer biraz daha fazla fikir var umuyoruz. Teşekkürler.

İşte yönlendirme REGEX bölümünü kolları kodu:

/ / Döngü yoluyla vahşi kartları arıyorsunuz rota dizi

    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;
        }
    }

Ben denemek istiyorum

$route['\w\w/login'] = "/user/index";

Benim için aşağıdaki işler (dili Sağlanan her zaman küçük harfe edilir):

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

Watain belirtildiği gibi, eşleşen lang gerek yok çünkü. kodu, sen '(' ve ')' bırakın

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