url parse - маршрут не найден - PullRequest
0 голосов
/ 09 октября 2011

Я разработал веб-сайт, он работал нормально, но в последнее время я изменил ссылки для целей SEO.Я только что заменил _ на -.Теперь я получаю сообщение об ошибке "Маршрут не найден".

Это соответствующий массив

$routes = array(
    array('url' => '/^products\/(?P<cat>\w+)$/', 'controller' => 'products', 'view' => 'products_list')
);

Ссылка выглядит следующим образом

http://localhost/product/sample-page

Когда я удаляю - или заменяю его на _, это работает.

Ответы [ 4 ]

1 голос
/ 09 октября 2011

Измените свое регулярное выражение из сокращенного класса символов \w, который соответствует буквам, цифрам и подчеркиванию, на более явное, чтобы соответствовать буквам верхнего и нижнего регистра, цифрам, _ и -.

$routes = array(
    array('url' => '/^products\/(?P<cat>[A-Za-z0-9_-]+)$/', 'controller' => 'products', 'view' => 'products_list')
);
0 голосов
/ 21 марта 2012

Привет, друзья! Я нашел другой метод для анализа URL. Используя это, вы можете получить «.html» в конце URL для дружественной поисковой системы.

.htaccess файл

RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-l

RewriteRule ^(.+)$ index.php?url=$1 [QSA,L]

код синтаксического анализа URL

$url = isset($_GET['url']) ? $_GET['url'] : null;
    $url = str_replace(".html", "", $url);
    $url = str_replace("-", "_", $url);
        //you could use rtrim(); but I had some trouble when the url had the "t" as the ending character.
    //$url = rtrim($url, '.html');
    $url = explode('/', $url);
0 голосов
/ 09 октября 2011

Вы можете проверить здесь пример:

http://rubular.com/r/czUkSgbYjs

И вы можете играть с другим регулярным выражением.

0 голосов
/ 09 октября 2011

Вы также можете оставить \ w там, но добавить - явно, т.е.

$routes = array(
array('url' => '/^products\/(?P<cat>[\w\-]+)$/', 'controller' => 'products', 'view' => 'products_list')

);

...