CakePHP с тематикой robots.txt

У меня есть приложение CakePHP, которое использует тематические представления, css и изображения. Теперь мне нужен еще и тематический robots.txt.

Естественно, я помещаю файл robots.txt в каждую папку темы /View/Themed/Theme/webroot/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]

Но это очень быстро выйдет из-под контроля.


person Chriss Baumfleisch    schedule 09.06.2016    source источник
comment
Предполагается, что это статический или динамически сгенерированный файл? Почему решение mod_rewrite не подходит?   -  person Álvaro González    schedule 09.06.2016
comment
Это может/должен быть статический файл. Мне пришлось бы добавить 100 или более таких случаев, и это должно быть возможно с темами.   -  person Chriss Baumfleisch    schedule 09.06.2016


Ответы (1)


Темы так не работают

Обычно тематические файлы (img, css, js, ctp) перезаписывают файлы по умолчанию.

На самом деле это не так. CakePHP может обрабатывать только запросы, которые достигают php-кода, если на пути есть статический файл, соответствующий пути, который будет обслуживаться непосредственно веб-сервером, поскольку это то, что правила перезаписи по умолчанию.

При использовании темы 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).

На самом деле это то, чем вы должны воспользоваться, разместив или связав ресурсы вашей темы непосредственно в веб-корне как обслуживание файлов через php медленнее, чем без вызова php.

Используйте маршрут и действие контроллера, а не переписывайте правила

Поскольку у вас настроено несколько точек домена в одном приложении (подразумевается) и вы хотите, чтобы один URL-адрес (/robots.txt) возвращал другой контент, это невозможно с правила перезаписи по умолчанию, чтобы URL указывал на статический файл1 . Чтобы сделать содержимое /robots.txt динамическим, просто удалите файл в webroot/robots.txt и добавьте маршрут и действие контроллера для обработки обслуживания контента на основе темы, которая имеет отношение к запросу.

1 Очевидно, что это можно сделать, изменив правила перезаписи, но это означает дополнительную сложность и не позволяет настраивать ответ (используя другую тему -› мгновенное изменение содержимого). Однако вы можете рассмотреть возможность создания правил перезаписи программно

person AD7six    schedule 09.06.2016
comment
Мне не нужна динамическая часть. Я надеялся, что это сработает с темами и статическим файлом robots.txt для каждого случая. - person Chriss Baumfleisch; 09.06.2016
comment
Итак, вы говорите, что я должен идти с маршрутом к контроллеру или придерживаться изменений htaccess? - person Chriss Baumfleisch; 09.06.2016