我是Zend Framework的新手,我正在建立一个希望实施良好SEO实践的网站。
网址结构将是:
example.com/language/city/controller/action
所以我在我的引导程序中创建了这条路线:
$front = Zend_Controller_Front::getInstance();
$router = $front->getRouter();
$route = new Zend_Controller_Router_Route(':language/:city/:controller/:action/*',
array('language'=>'es',
'city'=>'barcelona',
'controller'=>'index',
'action'=>'index'));
$router->addRoute('language_city', $route);
我不确定是否可以,但似乎可以做到这一点。
接下来我注意到所有这些网址都指向相同的内容(糟糕的SEO实践):
/
/es
/es/barcelona
/es/barcelona/index
/es/barcelona/index/index
有没有办法解决这个重复的内容问题?
提前致谢!
答案 0 :(得分:0)
您正在设置默认值,因此对于一个页面(默认页面),请求将是相同的。你删除了默认值,如果URI不包含变量,你会收到错误(我相信404
)。
$route = new Zend_Controller_Router_Route(
':language/:city/:controller/:action/*',
array('language'=>'es', //default when not in URI
'city'=>'barcelona', //default when not in URI
'controller'=>'index', //default when not in URI
'action'=>'index' //default when not in URI
)
);
您似乎可能希望删除 language
city
的默认设置,因为如果没有该数据,我不确定您的控制器将要执行的操作。< / p>
如果您这样做,唯一的“重复”URI将是:
/es/barcelona
/es/barcelona/index
/es/barcelona/index/index
但是你只需要使用其中一个URI 。如果您使用Zend的View_Helper_Url
输出链接,它会关闭index/index
- 因为它与默认值匹配。
您始终可以添加其他路线以将其他请求(例如/
)映射到相关控制器。
还应该注意,如果您只有一个控制器处理所有这些“城市”请求,则无需将其置于URI :
$route = new Zend_Controller_Router_Route(
':language/:city/:action/*',
array('language'=>'es', //default when not in URI
'city'=>'barcelona', //default when not in URI
'controller'=>'index', //all requests route here
'action'=>'index' //default when not in URI
)
);
然后唯一的'重复'URI是:
/es/barcelona
/es/barcelona/index