Динамические robotos.txt и sitemap.xml на PHP

Челябинская область

Автор:Dmitriy Altuhov

Динамические robotos.txt и sitemap.xml на PHP

Имеется несколько поддоменов (miass.it74.net и satka.it74.net) являющихся alias для основного сайта it74.net. Контент каждого поддомена генерируется PHP-скриптами на основе имени хоста ($_SERVER[‘HTTP_HOST’]).

Но что делать со статически файлами robots.txt и sitemap.xml

С sitemap.xml всё просто. Делаем PHP-файл sitemap.php со следующим содержимым:

<?php
$file=$_SERVER[‘SCRIPT_FILENAME’];
$last_modified_time = filemtime($file);
#$etag = md5_file($file);
$etag = $last_modified_time;

header(«Last-Modified: «.gmdate(«D, d M Y H:i:s», $last_modified_time).» GMT»);
header(«Etag: $etag»);

if (@strtotime($_SERVER[‘HTTP_IF_MODIFIED_SINCE’]) >= $last_modified_time ||
trim($_SERVER[‘HTTP_IF_NONE_MATCH’]) == $etag) {
header(«HTTP/1.1 304 Not Modified»);
exit;
}
header(«Content-Type: application/xml»);
echo «<?xml version=»1.0″ encoding=»UTF-8″?>»;
?>
<urlset (далее копируете оставшийся текст из sitemap.xml)
В теге <loc> делаете вставку имени хоста :<loc>http://<?php echo $_SERVER[‘HTTP_HOST’]; ?>/services/</loc>

У нас есть готовый динамический sitemap.xml для каждого хоста с именем файла sitemap.php
Теперь нужно сказать об этом поисковым системам. Это можно сделать вручную через панели управления «Вебмастер» или с помощью файла robots.txt

Для того, чтобы сделать robots.txt динамическим нужно перенаправить запрос с robots.txt на robots.txt.php (наш PHP-файл, который будет генерировать контент robots.txt). Для этого в файл .htaccess добавим:

RewriteEngine On
RewriteRule ^robots.txt$ /robots.txt.php

Файл robots.txt нужно удалить/переименовать, иначе фронт-енд nginx (если данная схема работы используется у вас на хостинге) будет отдавать robots.txt напрямую, минуя бэкенд apache и .htaccess.

Теперь все запросы с robots.txt перенаправляются на robots.txt.php. Скрипт для динамической генерации robots.txt на PHP очень прост:

<?php
$file=$_SERVER[‘SCRIPT_FILENAME’];
$last_modified_time = filemtime($file);
#$etag = md5_file($file);
$etag = $last_modified_time;

header(«Last-Modified: «.gmdate(«D, d M Y H:i:s», $last_modified_time).» GMT»);
header(«Etag: $etag»);

if (@strtotime($_SERVER[‘HTTP_IF_MODIFIED_SINCE’]) >= $last_modified_time ||
trim($_SERVER[‘HTTP_IF_NONE_MATCH’]) == $etag) {
header(«HTTP/1.1 304 Not Modified»);
exit;
}
header(«Content-Type: text/plain»);

echo ‘User-agent: *
Allow: /
Sitemap: http://’.$_SERVER[‘HTTP_HOST’].’/sitemap.php’;

?>

Comments Are Closed!!!