CakePHP以robots.txt为主题

时间:2016-06-09 14:18:51

标签: cakephp cakephp-2.6

我有一个使用主题视图,CSS和图像的CakePHP应用程序。现在我还需要主题robots.txt。

当然,我在每个主题文件夹/View/Themed/Theme/webroot/robots.txt中放置了一个robots.txt文件,但只显示了app/webroot中的一个文件。通常主题文件(img,css,js,ctp)将覆盖"默认"文件。

有没有办法让不同的robots.txt文件?

注意:之前我曾经在htaccess文件中有这样的东西

RewriteCond %{HTTP_HOST} ^bla.website.de$
RewriteRule robots.txt bla.robots.txt [L]

RewriteCond %{HTTP_HOST} ^foo.website.de$
RewriteRule robots.txt foo.robots.txt [L]

RewriteCond %{HTTP_HOST} !^www.website.de$
RewriteRule robots.txt noindex.robots.txt [L]

但这会很快失控。

1 个答案:

答案 0 :(得分:3)

主题不像那样

  

通常主题文件(img,css,js,ctp)将覆盖“默认”文件。

实际上,情况并非如此。 CakePHP只能处理到达php代码的请求,如果有一个静态文件与路径匹配,那将由网络服务器直接提供,就像the default rewrite rules实现的那样。

使用主题CakePHP将更改所请求的URL,即:

  

app/Plugin/DebugKit/webroot/js/my_file.js变为app/webroot/debug_kit/js/my_file.js

     

app/View/Themed/Navy/webroot/css/navy.css变为app/webroot/theme/Navy/css/navy.css

因此,不会修改资产(/css/somefile.css)的响应,使用主题时会产生完全不同的请求(/using_this_theme/css/somefile.css)。

事实上,通过将您的主题资源直接放在或链接到webroot serving files via php is slower than not invoking php,这是您应该利用的东西。

使用路由和控制器操作,而不是重写规则

由于您有一个多域点对点应用程序设置(隐含)并希望单个URL(/robots.txt)返回不同的内容,因此无法使用default rewrite rules使url指向静态文件 1 。要使/robots.txt的内容动态化,只需删除webroot/robots.txt中的文件,然后添加路由和控制器操作,以根据与请求相关的主题处理内容的提供。

1 显然可以通过更改重写规则来实现,但这意味着增加了复杂性,并阻止响应可配置(使用不同的主题 - >即时更改内容)。您可以考虑通过

以编程方式生成重写规则