2012-06-17 114 views
0

Zend Route問題。URL中的雙斜槓。

通常它工作正常。

 
http://www.example.com/course-details/1/Physics-Newtons-Law 

但是,如果我在url中的一個額外的斜線型,我的錯誤控制器的noauthAction被調用。

不工作的URL示例。

 
http://www.example.com/course-details//1/Physics-Newtons-Law 
http://www.example.com/course-details/1//Physics-Newtons-Law 

有什麼我需要在路線定義中設置允許額外的斜線?

路由中的application.ini

 
resources.router.routes.viewcourse.route = "/course-details/:course_id/:title" 
resources.router.routes.viewcourse.defaults.controller = course 
resources.router.routes.viewcourse.defaults.action = view 
resources.router.routes.viewcourse.defaults.title = 
resources.router.routes.viewcourse.reqs.course_id = "\d+" 

回答

2

你可以使用一個控制器插件修復常見錯別字的URL。

/** 
* Fix common typos in URLs before the request 
* is evaluated against the defined routes. 
*/ 
class YourNamespace_Controller_Plugin_UrlTypoFixer 
    extends Zend_Controller_Plugin_Abstract 
{ 
    public function routeStartup($request) 
    { 
     // Correct consecutive slashes in the URL. 
     $uri = $request->getRequestUri(); 
     $correctedUri = preg_replace('/\/{2,}/', '/', $uri); 
     if ($uri != $correctedUri) { 
      $request->setRequestUri($correctedUri); 
     } 
    } 
} 

然後將插件註冊到您的ini文件中。

resources.frontController.plugins.UrlTypoFixer = "YourNamespace_Controller_Plugin_UrlTypoFixer" 
+0

謝謝扎克 - 爲我修好了。我走錯了路 - 我正在玩Apache的ReWrite規則來刪除雙斜槓 - 但這個很簡單。謝謝 – Gublooo

+0

也請注意,如果你通過$ config-> addConfig($ config,'routes')在你的boostrapper中的配置文件給路由器路由,它實際上並不是將已經存在的路由(默認值)添加到路由中,而是重寫它們。要真正添加路由,請確保您執行$ router-> addDefaultRoutes();在你做addConfig之前 – Ponsjuh