CakePHP 主题为 robots.txt

CakePHP themed with robots.txt

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

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

有没有办法拥有不同的 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]

但这很快就会失控。

主题不是那样的

Usually themed files (img,css,js,ctp) will overwrite the "default" files.

其实不然。 CakePHP 只能处理到达 php 代码的请求,如果存在与路径匹配的静态文件,它将直接由网络服务器提供服务,因为这就是 the default rewrite rules 实现的。

使用主题时,CakePHP 将更改 请求的url 即:

app/Plugin/DebugKit/webroot/js/my_file.js becomes app/webroot/debug_kit/js/my_file.js

app/View/Themed/Navy/webroot/css/navy.css becomes 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) 到 return 不同的 内容default rewrite rules 无法使url 指向静态文件1。要使 /robots.txt 的内容动态化,只需删除 webroot/robots.txt 中的文件并添加路由和控制器操作以根据与请求相关的主题来处理内容服务。

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