Канонизация URL: "/index.php" и "/"

К сожалению, концепция индексных страниц (index.php, Default.aspx и т.д.)
приводит к еще одной проблеме дублирования контента. Если Web-сервер не обнаруживает в каталоге запрошенное имя файла, обычно по умолчанию выдается "индексная" страница, но без перенаправления на эту страницу. Если на оба э т и URL-адреса имеются ссылки (неважно — внутренние или с других сайтов), возникает проблема дублирования контента, т.к. для доступа к одному и тому же контенту имеются два URL.
Строго говоря, ни один из этих адресов не является более правильным, но короткие URL все же удобнее, и поэтому мы предпочитаем использовать /, а не /index.php.
Решение этой проблемы аналогично решению проблемы www.example.com
и example.com. При получении запроса на файл с именем, оканчивающимся на
index.php или index.html, необходимо выполнять перенаправление на содержащий
его каталог. Код перенаправления можно легко реализовать с помощью правила
mod_rewrite или РНР.
Если использовать mod_rewrite, то нужно добавить в файл .htaccess следующие
строки:
RewriteCond %{THE_REQUEST} GET\ .*/index\.(php|html)\ HTTP
RewriteRule A(.*)index\.(php|html)$ /$1 [R=301,L]
После выполнения э т о г о изменения попытка загрузить http: / /seophp. example. com/
index.php приведет к перенаправлению на http: //seophp. example. com/.
Такое же перенаправление можно выполнить в PHP-коде. Этому посвящено наше
следующее упражнение.
Устранение index.php
1. Добавьте в папку seophp файл index.php, содержащий следующий код:
<?php
// перенаправление текущего запроса, если это необходимо
require_once 1include/url_redirect.inc.php';
// перенаправление запросов к index.php и index.html в корневой каталог
f ix_index_url,() ;
?>

HaBopoTbi SEO: SEO для Tymix

<Ы>Добро пожаловать в Навороты SEO!

2. Добавьте в файл include\url_redirect. inc.php следующий код:
<?php
// загрузка библиотеки генератора URL
require_once 'url_factory.inc.php1;
// перенаправление запросов к index.php и index.html в корневой каталог
function fix_index_url()
{
// запрос к index.php перенаправляется на ./
if (preg_match('#(.*)index\.(html|php)$#•, $_SERVER['REQUEST_URI'],
^$captures))
// выполнение перенаправления 301 на новый URL
header('HTTP/1.1 301 Moved Permanently');
header('Location: ' . $captures[1]);
}
}
?>
3. Загрузите страницу http: //seophp.example. com/index.php — вы должны быть
перенаправлены на http: //seophp. example. com/ (рис. 4.5).
Приведенный код не сложен для понимания. Вначале была создана очень простая
версия файла index.php, который содержит только заголовок. Но вначале э т о т файл
загружает сценарий url_redirect. inc.php. Данный сценарий проверяет, оканчивается
ли U R L обращения к странице на index. php или index. html:
// запрос к index.php перенаправляется на ./
if (preg_match('#(.*)index\. (htmlIphp)$#', $_SERVER['REQUESTMJRI'], $captures))
Здесь с помощью регулярного выражения выполняется проверка, заканчивается
ли U R L на одно из указанных имен файлов. Функция pregmatch ( ) сохраняет все
символы, предшествующие имени файла, с помощью выражения (. * ) . Эти символы,
сохраненные в $ captures [ 1 ], и являются местом, на которое нужно выполнить перенаправление.
При соответствии образцу выполняется перенаправление 301:
{
// выполнение перенаправления 301 на новый URL
header('HTTP/1.1 301 Moved Permanently');
header('Location: ' . $captures[1]);
}