我把我能找到的关于 Zend_Controller_Router_Route 的所有东西都涂红了,但我无法找到如何设置默认控制器或从 url 中排除某些内容,例如:
www.example.com/test/controler/action
我怎么能忽略“测试”?
现在我总是将“测试”作为默认控制器..
谢谢,文齐斯拉夫·安杰洛夫
我把我能找到的关于 Zend_Controller_Router_Route 的所有东西都涂红了,但我无法找到如何设置默认控制器或从 url 中排除某些内容,例如:
www.example.com/test/controler/action
我怎么能忽略“测试”?
现在我总是将“测试”作为默认控制器..
谢谢,文齐斯拉夫·安杰洛夫
这可以在 /public 子目录的 .htaccess 中完成。
像这样添加另一个 RewriteCond:
RewriteCond %{REQUEST_URI} !^/test* [OR]
这应该解决它。
在您的示例中,如果您使用默认路由,则url 'test'将是模块。
www.example.com/test/controler/action //module = test, controller = controler, action = action
您可以使用以下行在 application.ini 中为所有这三个指定默认值:
resources.frontController.defaultcontrollername = 'index'
resources.frontController.defaultaction = 'index'
resources.frontController.defaultmodule = 'default'
您可能感兴趣的另一个可用设置:
resources.frontController.useDefaultControllerAlways = false
[编辑] 如果您确实需要从路由/请求中过滤字符串。您可能可以通过路线来做到这一点,但我对路线的了解不足以帮助您解决问题。另一个选择(除了 .htaccess)是测试和重定向。也许是这样的:
public function preDispatch() {
$request = $this->getRequest();
if ($request->getController() = 'test' || $request->getAction() = 'test' || $request->getModule() = 'test' ) {
$this->_redirect('url');
}
}
这可以放在每个控制器中,但作为插件可能会更好。当然,您可以使用 switch() 而不是讨厌的 if() 语句。
希望其中一位路由器专家能提供更好的解决方案。
祝你好运...