Php 带有zend框架的Url语言前缀
我迷失在Zend Framework的url重写中! 我有一个Php 带有zend框架的Url语言前缀,php,zend-framework,url,url-rewriting,Php,Zend Framework,Url,Url Rewriting,我迷失在Zend Framework的url重写中! 我有一个route.ini像这样: routes.page.route = :slug protected function _initRoutes() { $uri = explode('/', $_SERVER['REQUEST_URI']); if (!in_array('admin', $uri)) { //$front = Zend_Controller_Front::getInstance()
route.ini
像这样:
routes.page.route = :slug
protected function _initRoutes() {
$uri = explode('/', $_SERVER['REQUEST_URI']);
if (!in_array('admin', $uri)) {
//$front = Zend_Controller_Front::getInstance();
$config = new Zend_Config_Ini(APPLICATION_PATH . '/configs/routes.ini');
$router = $front->getRouter();
$router->addConfig($config, 'routes');
$front->registerPlugin(new Rez_Controller_Plugin_Routing(), 2);
}
}
我在引导程序中有这样一个调用:
routes.page.route = :slug
protected function _initRoutes() {
$uri = explode('/', $_SERVER['REQUEST_URI']);
if (!in_array('admin', $uri)) {
//$front = Zend_Controller_Front::getInstance();
$config = new Zend_Config_Ini(APPLICATION_PATH . '/configs/routes.ini');
$router = $front->getRouter();
$router->addConfig($config, 'routes');
$front->registerPlugin(new Rez_Controller_Plugin_Routing(), 2);
}
}
插件如下所示:
class Rez_Controller_Plugin_Routing extends Zend_Controller_Plugin_Abstract {
public function dispatchLoopStartup(Zend_Controller_Request_Abstract $request)
{
$item_db = new Application_Model_DbTable_Item();
if(NULL != $request->getParam("slug")){
if("admin" == $request->getParam("slug")){
$request->setModuleName('admin');
$request->setControllerName("index");
$request->setActionName('index');
}
$page = $item_db->getPage($request->getParam("slug"));
if(FALSE == $page){
$request->setModuleName('default');
$request->setControllerName($request->getParam("slug"));
$request->setActionName('index');
return;
}else{
if(NULL !== $request->getParam("language")){
$page["lang"] = $request->getParam("language");
}
$request->setModuleName('default');
$request->setControllerName("index");
$request->setActionName('page');
$request->setParams($page);
return;
}
}
}
问题是我必须在URL中预先添加一个语言前缀。”htttp://mywebsite.com/en/a-simple-page
仅当浏览器语言为英语或用户单击了英语标志时,否则,URL必须类似于http://mywebsite.com/a-simple-page“
我试图在route.ini中添加以下内容:
routes.page.route = :language/:slug
routes.page.reqs.language = "^(en|nl)$"
routes.page.defaults.language = "nl"
但是当我尝试
”时http://mywebsite.com/a-simple-page“
它在时不工作”http://mywebsite.com/en/a-simple-page“
工作正常,我可以在插件中获取参数。即使URL中没有语言代码,如何使其接受所有URL 要使其起作用,您需要连锁两条路线
resources.router.routes.defaultmodule.type = Zend_Controller_Router_Route_Module
resources.router.routes.defaultmodule.abstract = On
resources.router.routes.defaultmodule.defaults.module = "default"
resources.router.routes.locale.type = Zend_Controller_Router_Route
resources.router.routes.locale.route = ":locale"
resources.router.routes.locale.reqs.locale = "^(en)$"
resources.router.routes.locale.defaults.locale = "nl"
resources.router.routes.default.type = Zend_Controller_Router_Route_Chain
resources.router.routes.default.chain = "locale,defaultmodule"
请记住,由于SEO的影响,在2个URL下有相同的内容是不好的。重定向更合适。我通过在route中添加更多路由来解决问题。我只是建议,为什么不使用PHP检测用户语言,然后使用会话来存储它?在网站顶部显示一个小标志选项,例如检测语言:两个url的内容不相同,有一个是英文,另一个是荷兰语。请看我的改进答案。我希望这有帮助。