我有一个使用主题视图,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]
但这会很快失控。
答案 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 显然可以通过更改重写规则来实现,但这意味着增加了复杂性,并阻止响应可配置(使用不同的主题 - >即时更改内容)。您可以考虑通过
以编程方式生成重写规则