我正在定義用於清理我的URL的正則表達式路由。這個想法是,用戶添加的所有頁面將使用URL www.example.com/page-slug,而不是使用實際的控制器www.example.com/userpages/page-slug。其他頁面將遵循標準模塊:控制器:動作路由方案。正則表達式路由 - 規則未找到
我正在嘗試使用路由器優先級。
我已經定義了以下方案..
class Default_Bootstrap extends Zend_Application_Module_Bootstrap{
protected function _initRoute() {
$front = Zend_Controller_Front::getInstance();
$router = $front->getRouter(); // returns a rewrite router by default
$route['index'] = new Zend_Controller_Router_Route_Regex(
'/',
array(
'module' => 'default',
'controller' => 'index',
'action' => 'index'
)
);
$route['contact'] = new Zend_Controller_Router_Route_Regex(
'contact/(\d+)',
array(
'module' => 'default',
'controller' => 'contact',
'action' => 'index'
)
);
$route['research'] = new Zend_Controller_Router_Route_Regex(
'research/(\d+)',
array(
'module' => 'default',
'controller' => 'research',
'action' => 'index'
)
);
$route['account'] = new Zend_Controller_Router_Route_Regex(
'account/(\d+)',
array(
'module' => 'default',
'controller' => 'account',
'action' => 'index'
)
);
$route['userpages'] = new Zend_Controller_Router_Route_Regex(
'/(.+)',
array(
'module' => 'default',
'controller' => 'userpages',
'action' => 'index'
),
array(
'slug' => 1
),
'%s'
);
$router->addRoute('userpages', $route['userpages']);
$router->addRoute('contact', $route['contact']);
$router->addRoute('research', $route['research']);
$router->addRoute('account', $route['account']);
$router->addRoute('index', $route['index']);
}
}
的東西,一般工作正常與路由器的優先級,確保指數/帳號/科研/聯繫人頁面拿起正確的控制器。但是,當試圖訪問由「用戶頁面」路線覆蓋的URL時「關於美」,最終捕獲所有路線沒有被發現導致...
Message: Invalid controller specified (about-us)
.
.
.
Request Parameters:
array (
'controller' => 'about-us',
'action' => 'index',
'module' => 'default',
)
任何想法,我要去哪裏錯在這裏?在我看來,正則表達式是正確的「/(.+)」應該捕捉不是索引頁面的東西。
編輯:@phatfingers,OK,你說得對,我已經編輯「\ d +」來捕捉一個或多個任意字符「+」。問題依然存在。事實上,在更改正則表達式之前,我嘗試了URL www.example.com/52,並得到了同樣的錯誤 - 「指定的控制器無效(52)」。更改後 - 根據上述編輯過的代碼,該規則仍無法找到任何匹配。
正則表達式 「(\ d +)」 只匹配數字。示例網址「www.example.com/page-slug」不以數字結尾。 – phatfingers
感謝觀察@phatfingers,看到我的編輯以上 - 這個規則還是不匹配預期的位置 – NaNuk
我認爲你必須放棄正斜槓在「userpages」正則表達式,即只是'(」 +)' –