url parse - 找不到路由

时间:2011-10-09 16:15:54

标签: php parsing url routes

我设计了一个网站,它工作正常,但最近我修改了链接用于搜索引擎优化目的。我刚刚将_替换为-。现在我找到了一条未找到路线的错误。

这是匹配的数组

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

链接就像这样

  

http://localhost/product/sample-page

当我删除-或将其替换为_时,它可以正常工作。

4 个答案:

答案 0 :(得分:1)

将正则表达式从速记字符类\w(与字母,数字和下划线匹配)更改为更明确的正则表达式,以匹配大写和小写字母,数字_和{{ 1}}。

-

答案 1 :(得分:0)

您也可以将\ w留在那里,但是明确地添加 - 即

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

);

答案 2 :(得分:0)

你可以在这里查看一个例子:

http://rubular.com/r/czUkSgbYjs

你可以玩不同的正则表达式。

答案 3 :(得分:0)

朋友们,我发现了另一种解析网址的方法。使用此功能,您可以在网址末尾添加“.html”,以便搜索引擎友好。

.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);