URL中的双斜杠。

时间:2012-06-17 16:16:54

标签: zend-framework zend-route zend-acl zend-router

Zend Route问题。

通常它工作正常。

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

但如果我在url中输入一个额外的斜杠,我的错误控制器的noauthAction就会被调用。

不起作用的网址示例。

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+"

1 个答案:

答案 0 :(得分:2)

您可以使用控制器插件修复常见的网址拼写错误。

/**
 * 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"