我知道我以前见过这样做,但我在任何地方都找不到信息。我需要能够在 Zend 框架中使用 .html 扩展进行路由。
IE /controller/action.html 应该路由到适当的控制器/动作。
我们有一个想法用 .htaccess 文件丢弃 .html 扩展名,但我认为更改路由配置会是更好的解决方案。
欢迎任何建议。
我知道我以前见过这样做,但我在任何地方都找不到信息。我需要能够在 Zend 框架中使用 .html 扩展进行路由。
IE /controller/action.html 应该路由到适当的控制器/动作。
我们有一个想法用 .htaccess 文件丢弃 .html 扩展名,但我认为更改路由配置会是更好的解决方案。
欢迎任何建议。
这是我在几个应用程序中使用的插件:
/**
* Removes .html extension from URI, if present.
*/
class Application_Plugin_RemoveHtmlExtension extends Zend_Controller_Plugin_Abstract
{
public function routeStartup(Zend_Controller_Request_Abstract $request)
{
// remove ".html" from the end of the URI
$url = preg_replace('#\.html$#i', '', $request->getRequestUri());
$request->setRequestUri($url);
}
}
我试图对旧应用程序做同样的事情。这对我有用。
$front = Zend_Controller_Front::getInstance();
$router = $front->getRouter();
$router->addRoute('routeHTML',
new Zend_Controller_Router_Route_Regex( '([a-z-]+)/([a-z-]+)/([a-z-]+)\.html', array(),
array(1 => 'module', 2 => 'controller', '3' => 'action') ,
'%s/%s/%s.html')
);
默认路由(不带模块)是:
:controller/:action
您可以通过以下方式删除:
$router->removeDefaultRoutes();
然后添加您的版本:
:controller/:action.html