重定向到动态站点地图还是通过yiic生成?

时间:2014-11-05 03:48:00

标签: php .htaccess yii sitemap

我想为yii网站呈现动态网站地图。 但是我没有在网址管理器中这样做:

'urlManager'=>array(                
    'showScriptName'=>false, 
    'rules'=>array(                 
        'sitemap.xml/*'=>'/site/sitemapxml', 
        array('site/sitemapxml', 'pattern'=>'sitemap.xml', 'urlSuffix'=>''),
 ...

所以我转向.htaccess,我添加了一个像这样的重定向:

Redirect 301 /app3/sitemap.xml http://tarex.ru/app3/index.php/?r=site/sitemapxml

另一种选择是通过an extension in terms of a yiic command将sitemap.xml生成为文件。会有更多的时间/追索权吗?

1 个答案:

答案 0 :(得分:1)

首先,您的规则不正确,请改用:

'rules' => array(                 
    '/sitemap.xml' => '/site/sitemapxml', 
    ...
)

现在,关于你的问题,它并不重要,你会更喜欢哪种方式,每个方面都有自己的缺点和优点。

控制器操作选项

<强>优点:

  • 易于实施和维持。它只是另一个动作,您不会忘记在您的系统中如何生成站点地图。

<强>缺点:

  • 因此,动态内容会降低性能。

<强>解决方案: 使用COutputCache过滤器进行缓存。将此过滤器添加到SiteController:

public function filters()
{
    return array(
        array(
            'COutputCache + sitemap',
            'duration' => 24 * 60 * 60 // cache for 24 hours
        ),
    );
}

不要忘记在配置文件中配置cache组件。请使用CFileCache。如果您不熟悉此主题,请阅读Yii权威指南的corresponding section

这是一个非常灵活的解决方案,您可以扩展此示例,以便在需要时从配置文件中读取缓存持续时间。

yiic选项

<强>优点:

  • sitemap.xml只是一个静态文件,由Web服务器提供更有效的服务

<强>缺点:

  • 需要定期更新并控制此过程
  • 需要使用除框架之外的其他东西,这也需要一些监控

<强>解决方案: 使用cron作业生成sitemap.xml

虽然最终的决定很大程度上取决于项目的具体细节,但总的来说,我坚持第一种方法。