我们如何在cakephp中的控制器名称之前添加一些文本?

时间:2013-01-26 07:48:42

标签: php cakephp seo

我有一个SEO要求,当用户登录时,他们的用户名应该显示在控制者名称之前。

  • example.com/home - 目前看起来像这样
  • example.com/username/home - 我希望它看起来像这样

我在routes.php中尝试了一些基本的修改,例如:

Router::connect('/haresh/:controller', array('action' => 'index'));

有了它,它可以工作,但是这个选项丢失了基本路径所以所有图像都是    消失。即像这样的图片网址:

<img src='img/xyz.png' />

不要工作。

如何修改网址,以便/username/为所有网址添加前缀,并修复图像路径问题?

2 个答案:

答案 0 :(得分:3)

SEO适用于匿名用户

如果问题中的网址仅适用于已登录的用户 - 它们的搜索引擎优化价值为零 - 因为googlebot et.al.永远不会登录到您的网站,如果他们这样做 - 所有网址都是/googlebots-username/...

SEO路线

假设这些用户网址是公开可访问的(请参阅上一点,如果它们不是没有价值的话),您需要做的就是为它们定义路线:

// define other routes first
Router::connect('/about', array('controller' => 'pages', 'action' => 'display', 'about'));

Router::connect('/:username/:controller', array('controller' => 'default', 'action' => 'index'));
Router::connect('/:username/:controller/:action', array('controller' => 'default', 'action' => 'index'));
Router::connect('/:username/:controller/:action/*', array('controller' => 'default', 'action' => 'index'));

然后,您可以访问控制器中的用户名属性

$username = $this->request->params['named']['username'];

修复图像

这是一个单独的问题,但简单的解决方法是使用appropriate helper method

<?php echo $this->Html->image('xyz.png', array('alt' => 'to the abc')); ?>

大多数标记问题的答案是使用适当的帮助方法。

替代地

或者只使用绝对网址:

<img src='/img/xyz.png' />

显然,如果网址正在变化 - 使用资产的相对路径意味着请求的图片会根据当前网址发生变化。

答案 1 :(得分:0)

如果只是图像路径问题,您可以使用任一解决方案

1使用cakephp的html helper类

 <?php echo $this->Html->image('xyz.png', array('alt' => 'alternate text')); ?>

2使用webroot路径

<img src='<?php echo $this->webroot ?>img/xyz.png' />