Лучшая по цене-качеству Ddos защита

Руководство по настройке htaccess (переадресации, ЧПУ) для SEO

2

Опубликовано : 14-12-2015 | Рубрика : Внутренняя оптимизация | Автор : tekseo

На сегодняшний день существует немало CMS систем, но лишь единицы из них имеют штатные, нужные SEO- специалисту, решения. Однако их базовые возможности весьма скудны и в полной мере не могут помочь присти сайт к оптимальному для поисковиков и пользователей виду. Установка же сторонних дополнений лишь утяжеляет движок, делая его более требовательным к железу, а обилие рекламы и сопутствующих копирайтов не идет на пользу позициям проекта в выдаче. В связи с этими обстоятельствами оптимальным выходом является ручная корректировка htaccess. Впрочем, все «по полочкам» расставлю в данной статье.

В сравнении с расширениями для CMS-систем (к примеру, плагины для WordPress), использование прямых указаний в htaccess имеет ряд неоспоримых преимуществ. Перечислим основные из них:
1. Уменьшение нагрузки на MySQL. SEO-дополнения регулярно обращаются к базе данных, так как именно там сохраняется информация о текущей конфигурации. В то же время, редиректы через htaccess функционируют на уровне сервера — их использование ощутимо повышает общую производительность проекта.
2. Работа в условиях ограниченного доступа. Файл дополнительной конфигурации позволяет задавать параметры для отдельных каталогов. Благодаря ему можно осуществлять тонкую настройку даже в том случае, если ресурс размещен на шаред-хостинге и непосредственная работа с httpd.conf невозможна.
3. Дополнительная защита. В отличие от robots.txt, директивы, прописанные в htaccess обязательны к исполнению Apache. Это обеспечивает эффективное управление индексацией, а также защиту системы от спам-ботов и сканеров.

Использование redirect 301 в файле htaccess

Теперь давайте перейдем от теории к практике и начнем с наиболее известных приемов внутренней оптимизации, знакомых многим веб-мастерам.
Важное замечание: прежде, чем прибегать к описанным ниже методикам, обязательно сделайте резервную копию, особенно если ранее никогда не работали с Апачем напрямую.

Базовые возможности htaccess

Ниже приведены готовые решения насущных задач, с которыми сталкиваются практически все оптимизаторы и веб-мастера. Однако даже опытные специалисты склонны пренебрегать перечисленными рецептами, а значит, стоит еще раз вспомнить азы.

1. Страницы ошибок
При возникновении технических неполадок с хостингом или сайтом, выдается один из стандартных кодов состояния HTTP. Воспользовавшись директивой ErrorDocument, можно задать автоматическое перенаправление пользователей к соответствующим html-документам. При этом htaccess будет выглядеть следующим образом:

ErrorDocument ошибка /errors/ошибки.html

Например:
ErrorDocument 404 /errors/404.html

Наиболее распространенные ошибки:
403 — запрет на доступ к файлу/странице
404 — запрашиваемый документ/ссылка отсутствует, либо не корректный URL.
500 — внутренняя ошибка сервера.

2. Запрет просмотра для определенных User-Agent
Абсолютно каждое интернет-приложение, будь то браузер или поисковый робот, имеет особый идентификатор — User-Agent. Зная его значение, можно заблокировать нежелательные программы. В СЕО указанный прием используется для запрета индексации и защиты от различных сканеров. Также можно весьма эффективно противостоять спаммерам. Переадресация htaccess такова:

<IfModule mod_rewrite.c>
RewriteEngine on
RewriteBase /
RewriteCond %{HTTP_USER_AGENT} ^ SpamBot_1 [OR]
RewriteCond %{HTTP_USER_AGENT} ^ SpamBot_2
RewriteRule ^.*$ - [F]
</IfModule>

Выше мы запретили доступ к площадке условным спам-ботам 1 и 2. При попытке сканирования, будет выводиться стандартная 403 ошибка.
Примечание: указанная выше методика, несмотря на все преимущества, имеет один недостаток — требуется знать User-Agent утилиты, которую вы хотите запретить. Спамеры стараются обойти подобную защиту, оставляя его пустым, либо размещая там случайную информацию. Противодействовать вредоносным программам в этом случае можно с помощью такого кода:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTP_USER_AGENT} ^$ [OR]
RewriteCond %{HTTP_USER_AGENT} ^.*(< |>|'|%0A|%0D|%27|%3C|%3E|%00).* [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^.*(HTTrack|clshttp|archiver|loader|email|nikto|miner|python).* [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^.*(winhttp|libwww\-perl|curl|wget|harvest|scan|grab|extract).* [NC]
RewriteRule ^(.*)$ - [F,L]
</IfModule>

Запись позволяет отфильтровывать пустые и подозрительные User-Agent, а также сканеры, использующие наиболее популярные методы парсинга веб-сайтов.

3. Запрет хотлинков
Термин “хотлинк” обозначает подключение к веб-странице файла (чаще всего, изображения), расположенного на сторонних ресурсах. Мало того, что у вас, фактически, воруют контент — при этом создается еще и дополнительная нагрузка на проект. Бороться с этим можно, настроив в htaccess проверку переменной HTTP_REFERER. Если ее значение не совпадает с именем сервера, на котором размещен оригинал, изображение будет подменяться “заглушкой” (например, картинкой с вашим копирайтом):

<IfModule mod_rewrite.c>
# Проверка HTTP_REFERER
RewriteEngine On
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://(.+\.)?tekseo\.su/ [NC]
 
# Замена запрашиваемого файла картинкой с копирайтом
RewriteCond %{REQUEST_URI} !copyright\.gif$ [NC]
RewriteRule \.(jpg|jpeg|gif|bmp|png)$ http://tekseo.su/images/copyright.gif [L]
</IfModule>

4. Технические работы
Если планируются глобальные изменения (редизайн, или добавление нового функционала), возникает необходимость установки “заглушки”. Штатные средства большинства движков закрывают сайт для всех, что весьма неудобно. Однако настроенный через htaccess редирект позволяет оставить проект доступным администратору, в то же время демонстрируя посетителям страницу с информацией о технических работах:

<IfModule mod_rewrite.c>
RewriteEngine On
 
# Вносим в исключения свой IP, а также внутренний адрес сервера.
RewriteCond %{REMOTE_ADDR}  !Ваш_IP
RewriteCond %{REMOTE_ADDR}  !127.0.0.1
 
# Переадресуем на заглушку хосты, переходящие куда-либо, кроме maintenance.php.
RewriteRule !maintenance.php$ http://www.tekseo.su/maintenance.html [L,R=307]
</IfModule>

5. Настройка кэширования
Время отклика сайта является пусть и второстепенным, но все же фактором ранжирования. К тому же, при высокой нагрузке неизбежно возникают проблемы с доступностью, а значит, поисковый бот не сможет адекватно проиндексировать новые страницы. Разгрузить сервер поможет правильная настройка кэширования в браузерах посетителей. Это можно сделать, добавив необходимые параметры в заголовки.

В первую очередь, стоит разобраться с файлами, которые практически никогда не изменяются (изображения, документы pdf, doc, видео):

<ifModule mod_headers.c>
<FilesMatch "\.(flv|gif|jpg|jpeg|png|ico|swf|pdf|doc)$">
Header set Cache-Control "max-age=29030400, private"
</FilesMatch>
</IfModule>

Здесь для файлов с перечисленными расширениями мы установили заголовок Cache-Control, задав срок хранения в 1 год через переменную max-age. Вы можете уменьшить данный интервал, однако учтите — время задается в секундах. Private указывает, что кэширование необходимо осуществлять только на стороне пользователя, минуя прокси.

Правило для скриптов, стилей, xml лучше всего прописать отдельно, снизив время до пары дней:

<ifModule mod_headers.c>
<FilesMatch "\.(js|css|xml)$">
Header set Cache-Control "max-age=172800, private"
</FilesMatch>
</IfModule>

Динамические страницы лучше исключить из кэша вообще:

<ifModule mod_headers.c>
<FilesMatch "\.(pl|php|cgi|spl|scgi|fcgi)$">
Header unset Cache-Control
</FilesMatch>
</IfModule>

Также можно задать период в 30-60 секунд (это практически не создаст проблем посетителям, однако поможет снизить нагрузку на Апач в прайм-тайм).

6. Управляем индексированием
Поисковики склонны своевольничать, не оглядываясь на инструкции robots.txt. Особенно часто этим грешит Google, способный проиндексировать даже закрытую страницу, перейдя на ресурс по внешнему линку. Частично проблема решается через мета-тег robots, вот только его можно указать лишь для html-документа. Если же от цепких лап «паука» требуется скрыть файл, стоит обратиться к htaccess, благо X-Robots-Tag поддерживает все существующие директивы индексирования:

<IfModule mod_headers.c>
<FilesMatch “.(txt|doc|pdf)$”>
Header set X-Robots-Tag “index, nofollow, noarchive, nosnippet”
</FilesMatch>
</IfModule>

В примере выше мы разрешили поисковым роботам индексировать файлы с расширениями .txt, .doc, pdf, тем не менее, заблокировав возможность переходить по гиперссылкам, создавать сниппеты, а также сохранять информацию в кэш.

7. Сообщаем Гуглу о мобильной версии сайта
Если веб-ресурс генерирует различный код в зависимости от устройства пользователя, с которого осуществляется просмотр, а ссылки при этом не меняются, велик риск попасть под санкции Google (такое поведение может расцениваться как попытка подмены контента). Неприятностей можно избежать, прописав строчку:

<IfModule mod_headers.c>
Header append Vary User-Agent
</IfModule>

Данная запись сообщает, что содержимое страницы варьируется в зависимости от User-Agent.

Настройка постоянного редиректа

Код состояния HTTP 301 указывает на то, что запрошенный документ навсегда сменил адрес, а текущий URL следует считать устаревшим. Это позволяет не только перенести весь заработанный вес (в том числе: Траст, PR, ТИЦ), но и автоматически переправить пользователя на корректную страницу.

Переадресация и приведение ссылок к ЧПУ

1. Со старого URL на новый
Самая простая переадресация htaccess может быть задана с помощью директивы Redirect, используемой модулем Apache — mod_alias. Выглядит запись таким образом:

<IfModule mod_alias.c>
Redirect 301 /old-page.html http://tekseo.su/new-page.html
</IfModule>

Преимущество способа заключается в простом синтаксисе, недостаток — в том, что для перенаправления большого количества устаревших адресов, придется вручную прописывать каждый. Если же их число составляет десятки и сотни, лучше всего использовать mod_rewrite, который позволяет задавать redirect посредством регулярных выражений. Такой подход открывает широчайшие возможности для управления URL, в том числе создавать ЧПУ из автоматически сгенерированных ссылок. Для использования этого метода необходимо активировать (т.е. прописать в htaccess) не только сам модуль, но и опцию FollowSymLinks:

<IfModule mod_rewrite.c>
Options +FollowSymLinks
RewriteEngine On
# Размещаемый код редиректа
</IfModule>

2. Склейка домена с www и без www
Можно сказать, что это — основы технического SEO, ведь именно данные правила помогают исключить множественные дубли контента и объединить вес входящих ссылок. Существует два различных решения, одно из которых привязано к конкретному домену, другое же является универсальным. Чем именно воспользоваться — дело вкуса. Синтаксис таков:

а) Переадресация домена с префиксом www на домен без www

RewriteCond %{HTTP_HOST} ^www.tekseo\.su$ [NC]
RewriteRule ^(.*)$ http://tekseo.su/$1 [R=301,L]

Альтернатива такова:

RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ http://%1/$1 [R=301,L]

б) Перенаправление домена без префикса www на домен с www

RewriteCond %{HTTP_HOST} ^tekseo\.su$ [NC]
RewriteRule ^(.*)$ http://www.tekseo.su/$1 [R=301,L]

То же самое, но без привязки к домену:

RewriteCond %{HTTP_HOST} ^(.*)$ [NC]
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^(.*)$ http://www.%1/$1 [R=301,L]

3. Лишние слэши и тире
Весьма распространенная болезнь CMS — доступность сайта по адресам со знаком «/» на конце и без. Проблему также способен решить 301 redirect в htaccess, причем возможны два варианта:

а) Если вы желаете получить URL вида http://tekseo.su, необходимо прописать:

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} ^(.*)/$
RewriteRule ^(.*)/$ /$1 [R=301,L]

б) Если, напротив, требуется получить линки в формате http://tekseo.su/, то:

RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !(.*)/$
RewriteRule ^(.*[^/])$ $1/ [L,R=301]

Помимо этого, может наблюдаться появление лишних слэшей или тире (например, http://tekseo.su/category///page—1.html). 301 редирект в htaccess выглядит:

#Избавляемся от слэшей
RewriteCond %{REQUEST_URI} ^(.*)//(.*)$
RewriteRule . %1/%2 [R=301,L]
 
#Удаляем дополнительные тире
RewriteCond %{REQUEST_URI} ^(.*)(.*)$
RewriteRule . %1-%2 [R=301,L]

4. Избавляемся от index.php и index.html
Другая ситуация — дублирование урлов с index.php на конце. Побороть ее можно с помощью пары строчек:

RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.php\ HTTP/
RewriteRule ^index\.php$ http://tekseo.su/ [R=301,L]

Выше задан redirect 301 в htaccess для homepage. Аналогичным образом можно удалить index.php для любой другой категории:

RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /category/index\.php\ HTTP/
RewriteRule ^index\.php$ http://tekseo.su/category/ [R=301,L]

5. Меняем домен
Если сайт переименован, стоит задать глобальную переадресацию. Сделаем перенаправление с tekseo.su и www.tekseo.su на http://new-tekseo.su/

RewriteCond %{HTTP_HOST} ^www\.tekseo\.su$ [NC]
RewriteRule ^(.*)$ http://new-tekseo.su/$1 [L,R=301]
RewriteCond %{HTTP_HOST} ^tekseo\.su$ [NC]
RewriteRule ^(.*)$ http://new-tekseo.su/$1 [L,R=301]

6. Склейка доменов
При использовании алиасов, дабы исключить появление дублей, осуществляется склейка доменов. Сделать это можно посредством robots.txt, указав поисковым роботам основное зеркало, однако перенаправление является более надежным методом. Здесь задан редирект с tekseo.com и www.tekseo.com на tekseo.su:

RewriteCond %{HTTP_HOST} ^tekseo.com$ [OR,NC]
RewriteCond %{HTTP_HOST} ^www.tekseo.com$ [NC]
RewriteCond %{REQUEST_URI} !^/robots.*
RewriteRule ^(.*)$ http://tekseo.su/$1 [R=301,L]

7. 301 редирект ссылки с GET-параметром на другую динамическую
Достаточно нетривиальная задача, подобная необходимость может возникнуть при обновлении модулей, или радикальной переработке структуры размещенного контента. Разберем на следующем примере — ссылку вида /?option=mod_articles&pageid=title1 нужно переправить на /module/articles/?pageid=title1:

RewriteCond %{QUERY_STRING} ^/?option=mod_articles&pageid=(.*)$ [NC]
RewriteRule ^(.*)$ http://www.tekseo.su/module/articles/?pageid=%1 [R=301,L]

Другой случай из разряда казуистики: установив SEF-модуль на свой сайт, вы можете обнаружить, что он конфликтует с некоторыми расширениями, заботливо удаляя параметры из сгенерированных урлов. Если в целом новая система полностью вас устраивает, от нее не обязательно отказываться — достаточно прописать переадресацию в htaccess, передавая часть URL в виде GET-запроса (проще говоря, подставить вопросительный знак в нужное место ссылки):

RewriteCond %{REQUEST_URI} ^/parametеr$
RewriteRule ^(.*)$ http://site.com/?$1 [R=301,L]

Здесь мы сделали подмену исходного статического адреса http://www.tekseo.su/parametеr на динамический http://www.tekseo.su/?parametеr.

Формирование ЧПУ на уровне сервера

Создание человекопонятных урлов — одна из ключевых задач технической оптимизации веб-ресурсов. В отличие от примеров, приведенных выше, универсального рецепта здесь не существует. Прописывание автоматических ЧПУ в htaccess требует знания регулярных выражений. В нашем случае они будут использоваться для обнаружения тех или иных фрагментов ссылок и последующей их замены/удаления с целью получения SEF-конструкций. Для грамотного их построения применяются знаки препинания и специальные символы:
“^” — циркумфлекс, начало строки;
“$” — доллар, конец строки;
“.” — точка, любой единичный символ;
“*” — звездочка, любое количество символов, расположенных после указанного знака. Самостоятельно практически не используется;
“.*” — точка и звездочка, любое число любых символов;
“+” — плюс, аналог звездочки, однако предшествующий ему символ должен присутствовать хотя бы один раз;
“?” — знак вопроса, указывает, что стоящая перед ним конструкция (будь то единственный символ или группа) может отсутствовать (например, редирект 301 в htaccess, содержащий ^/page_1/?$ будет работать независимо от того, есть на конце слэш или нет);
“()” — круглые скобки, выделяют некую последовательность (запись формата (.*) обозначает группу из любого количества случайных знаков);
“[]” — квадратные скобки, любой указанный символ (^[0-9] будет означать, что в начале строки может располагаться случайная цифра от 0 до 9);
“{}” — фигурные скобки, указывают, сколько раз встречается символ или их сочетание (так, выражение [a-z]{3} значит, что строчные буквы латинского алфавита могут встречаться три раза);
“|” — вертикальная черта, логический оператор “or” (или), задает несколько условий (например, можно перечислить вероятные расширения файлов (jpg|jpeg|gif|bmp|png));
“\” — обратный слэш, служит для экранирования служебных знаков, если они являются предметом поиска (то есть, сочетание «\.» означает, что точка — значимый символ).

Еще одна важная деталь — флаги, идущие после кода htaccess redirect и заключенные в квадратные скобки. Нас интересуют следующие:

L — останавливает преобразования адреса сразу после выполнения строчки;
R= — определяет тип редиректа, если значение не указать, сервер по умолчанию выдаст код 302 (перемещен временно);
NC — независимо от регистра, позволяет обрабатывать урлы с заглавными и строчными буквами одним и тем же правилом;
S= — указывает количество правил, которые нужно пропустить;
N — сигнализирует о необходимости перезапуска, при этом обрабатывая результат предыдущего преобразования;
F — выводит ошибку 403 (доступ запрещен).

Теперь осталась самая малость — изучить директивы, переменные окружения Apache и опции, после чего вы сможете создавать редиректы htaccess самостоятельно. Строго говоря, из директив требуется знать только две основные:
RewriteCond — посредством нее задаются условия, при которых выполняется соответствующее правило;
RewriteRule — применяется собственно для задания перенаправления.

Из всего обилия переменных окружения наиболее часто употребляются следующие:
REQUEST_FILENAME (или SCRIPT_FILENAME) — полный путь к файлу, соответствующий текущему запросу;
REQUEST_URI — путь, прописанный в HTTP-запросе;
QUERY_STRING — GET-параметры.

Опции же пригодятся такие:
-d — проверка, ведет ли заданный путь к каталогу;
-f — проверка, является ли имя файлом;
-s — действует аналогично f, однако также проверяет размер файла (он должен быть больше 0).

Для чего можно использовать приведенную выше информацию? Прежде всего, для создания следующей записи, которая должна предварять код генерации SEF:

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f

Данная конструкция проверяет, не является ли запрос путем к файлу или каталогу. Восклицательный знак перед опциями обозначает отрицание. Если условие соблюдено, значит перед нами ссылка и она будет обработана в соответствии с правилами, прописанными в RewriteRule.

В заключении стоит разобрать еще один крайне важный момент — работу с RewriteRule. Данная директива позволяет создавать собственные переменные, что существенно упрощает работу с ЧПУ в htaccess. Для этого используются конструкции $1, $2, $3 и т.д. (а также %1, %2, %3), где цифра обозначает место расположения в строке. Но в чем же разница между $1 и %1? $1 используется для подстановки значений внутри самого правила RewriteRule, а %1 забирает таковое из условия RewriteCond.

Порядковые номера переменным присваиваются автоматически, слева направо. Иными словами, вам не придется явно их объявлять. Для большей наглядности, давайте разберем правило для создания красивого URL, включающее три переменные, а заодно применим на практике знания регулярных выражений.

ЗАДАЧА
Преобразовать сконфигурированный CMS системой адрес:
tekseo.su/articles/index.php?cat=SEO&subcat=WordPress&page=12
в более верный — с точки зрения юзабилити и SEO технологии:
tekseo.su/articles/SEO/WordPress/12.html

Это можно сделать буквально в одну строчку:

RewriteRule ^articles/([A-Za-z0-9-]+)/(.+)/([0-9]+).html$ index.php?cat=$1&subcat=$2&page=$3 [L]

Переменные распределились таким образом:
Правильный ЧПУ по средстав инструкций в htaccess

Им соответствуют следующие регулярные выражения:
$1=([A-Za-z0-9-]+) — здесь мы указали, что последовательность может содержать цифры, заглавные и строчные буквы латиницы, а также тире;
$2=(.+) — второй блок может содержать любой символ;
$3=([0-9]+) — третий, только цифры.

Если заданные условия соблюдены, происходит подстановка соответствующего значения GET-параметра, из них и формируется SEF-линк.

Переменную %1 проиллюстрируем на примере рассмотренного выше универсального редиректа на домен без www. Здесь с помощью %1 мы подставляем значения, заданные в RewriteCond.

RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ http://%1/$1 [R=301,L]

Еще один важный для понимания момент: файл htaccess технически не преобразует динамические ссылки в статические, а расшифровывает представленную Апачу статику, трансформируя в соответствующий динамический урл. Именно поэтому в правилах мы сперва записываем своеобразный “макет” того, что хотим получить, и лишь затем отмечаем переменными необходимые GET-запросы.

Понимание регулярных выражений дает возможность задавать редиректы через htaccess практически любой сложности. Зная синтаксис, можно создавать правила для SEF-адресов независимо от типа и особенностей системы управления контентом. Давайте же теперь разберем различные варианты подобного кода:

1. Удаление технических категорий
Исключение из ссылки ненужных элементов позволяет сократить ее длину. Многие движки создают древовидные структуры документов, добавляя в URL служебную информацию (например, “category” в WordPress). В итоге урлы становятся чересчур громоздкими, принимая вид http://tekseo.su/category/articles/page_1.html. Данную проблему можно решить с помощью специализированных плагинов, либо прописав ЧПУ в htaccess. Последнее также пригодится владельцам самописных ресурсов, не поддерживающих SEO функционал. Для указанного примера правило будет выглядеть следующим образом:

RewriteRule ^category/(.+)$ http://tekseo.su/ [R=301,L]

На выходе мы получим: http://tekseo.su/articles/page_1.html

2. Преобразование динамических ссылок в ЧПУ
Весьма плохо обстоят дела с динамическими ссылками, представляющими собой адрес исполняемого скрипта и GET-параметр, который ему передается. В этом случает исходный урл содержит знак вопроса, что осложняет процесс создания редиректа. Apache обрабатывает их следующим образом: все, что находится до “?” воспринимается как URl, все, что после — становится параметром, передаваемым скрипту. Чтобы перенаправление сработало верно, обработку нужно разбить на две части. В зависимости от местоположения знака, возможны варианты:

а). Знак вопроса находится после названия файла (например, http://tekseo.su/index.php?cat_id=345):

RewriteCond %{QUERY_STRING} ^cat_id=345$
RewriteRule ^index\.php$ http://tekseo.su/page_1? [L,R=301]

б). Если же вопросительный знак идет сразу после слэша (например, http://tekseo.su/pages/?cat_id=345), 301 редирект необходимо прописывать немного иначе:

RewriteCond %{QUERY_STRING} ^cat_id=345
RewriteRule ^(.*)$ http://tekseo.su/page_1? [L,R=301]

Автоматизировать процесс перезаписи можно, используя переменные. Тогда конструкция становится даже более наглядной. Усложним предыдущий пример. Предположим, у нас есть ссылка http://tekseo.su/index.php?cat_id=myposts&page_id=text. Требуется привести ее к формату http://tekseo.su/articles/myposts/text.html. Кроме того, мы хотим, чтобы данное правило работало для любых аналогичных URL. Запись будет выглядеть так:

RewriteRule ^articles/(.+)/(.+).html index.php?cat_id=$1&page_id=$2 [NC]

Особое применение 301-го редиректа

В заключении разберем нестандартные варианты использования hypertext access.

1. Работа с кириллическими доменами
Специфических особенностей работы с зоной .рф не существует, но проблема в том, что htaccess не поддерживает кириллицу. Поэтому перед тем, как прописывать настройки, необходимо преобразовать имя сайта в punycode. Сделать это можно посредством специальных конвертеров, либо воспользовавшись сервисом whois.

Давайте зададим перенаправление запросов с tekseo.su на тексео.рф:

<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{HTTP_HOST} ^www\.tekseo.su [NC]
RewriteRule ^(.*)$ http://xn--e1aaornd.xn--p1ai /$1 [R=301,L]
</IfModule>

2. Подмена внешней ссылки на внутреннюю
Достаточно остроумный способ, позволяющий сделать урл, ведущий на сторонний ресурс, внутренним в глазах поисковых роботов. Представим ситуацию: вы хотите поставить на своем сайте линк на профиль ВКонтакте http://vk.com/id12345. Чтобы скрыть его от глаз роботов, можно воспользоваться атрибутом nofollow, либо создать мнимую страницу “my_social”, добавив следующее:

<IfModule mod_rewrite.c>
RewriteEngine on
Redirect 301 http://tekseo.su/my_social http://vk.com/vk_id12345
</IfModule>

Формально ссылка останется внутренней, при этом пользователи ресурса ничего не заметят.

3. Редирект с прописных на строчные буквы
Одна из распространенных проблем многих CMS — появление дублей страниц, начинающихся с прописных и строчных букв (например, tekseo.su/Page1 и tekseo.su/page1). 301 редирект в htaccess способен справиться и с этой задачей, причем обработка будет происходить в автоматическом режиме и вам не придется описывать перенаправление вручную для каждого URL. Решение таково:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule [A-Z] - [E=HASCAPS:TRUE,S=1]
 
# Пропускаем секцию, если заглавные буквы отсутствуют.
RewriteRule ![A-Z] - [S=28]
 
# Замена букв латинского алфавита с A-Z на a-z.
RewriteRule ^([^A]*)A(.*)$ $1a$2
...
RewriteRule ^([^Z]*)Z(.*)$ $1z$2
 
# Запускаем повторный обход, если имеются еще заглавные буквы.
# В конце добавляем постоянный редирект htaccess.
RewriteRule [A-Z] - [N]
RewriteCond %{ENV:HASCAPS} TRUE
RewriteRule ^/?(.*) /$1 [R=301,L]
</IfModule>

4. Каноничные адреса для файлов
12 февраля 2009 года Гугл аннонсировал поддержку тега rel=”canonical”. Одновременно о работе с атрибутом заявили Yahoo и Bing, а в настоящее время канонические ссылки распознают практически все крупные поисковики. С помощью него можно указать, какая из копий веб-документа является исходной, передав оригиналу значения тИЦ, PR и т.д.

Чтобы задать rel=”canonical”, его необходимо прописать внутри тега соответствующей страницы:

<link rel="canonical" href="http://www.tekseo.su/page_1.html" />

Но что делать, если вы хотите сделать каноничным файл? Это может понадобиться в том случае, если проект поддерживает автоматическое создание pdf-документов. Вместо того, чтобы запрещать их индексирование, воспользуемся следующей конструкцией:

<ifModule mod_headers.c>
<Files document.pdf>
Header add Link<http://tekseo.su/article-about-seo.html>; rel=”canonical”‘
</Files>
</IfModule>

А регулярные выражения позволят указать в htaccess канонические версии сразу для всех файлов:

<ifModule mod_headers.c>
RewriteRule ([^/]+).pdf$ – [E=FILENAME:$1]
<FilesMatch “.pdf$”>
Header add Link<http://www.tekseo.su/%{FILENAME}e.html>; rel=”canonical”‘
</FilesMatch>
</IfModule>

5. Запрещаем воровство статей ВКонтакте
В процессе борьбы с дублями контента вы можете обнаружить ссылки такого вида: http://www.tekseo.su/page-name.html&post=-123_456. Эта проблема связана с наличием плагина социальных сетей, а именно — кнопкой ВКонтакте. Когда кто-либо решает поделиться очередной статьей на стене, в паблике или группе, автоматически генерируется подобный адрес. И все бы ничего, но такие урлы «на ура» индексируются поисковиком Google. Чтобы это предотвратить, достаточно добавить в htaccess следующее:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_URI} ^(.*)\&post=
RewriteRule ^(.*)\&post=(.*)$ $1 [R=301,L]
</IfModule>

Как видно, потенциал hypertext access чрезвычайно высок. Его грамотное использование позволяет решать абсолютное большинство задач технической оптимизации, используя нативные модули сервера. Что немаловажно, благодаря этому можно отказаться от программных “костылей”, получая дополнительные выгоды, в числе которых повышение производительности и защищенности курируемого проекта.


Комментарии

htaccess — главная причина, почему Апач все еще на плаву и юзается провайдерами. Жаль, что в Nginx не реализован подобный механизм: нужно либо править основной конфиг, либо подключать дополнительные через include опять же к основному конфигу, то есть для шаред-хостинга такой подход чуть менее чем полностью бесполезен. Да и синтаксис там куда сложнее, без поллитры не въехать, рядовому пользователю не растолковать. А так было бы классно отказаться от “индейца” навсегда, больно тяжелый, зараза, для большинства сайтов и вовсе избыточен…

Циферки, буковки, значки, ругательства какие-то… Не-не-не, я уж как-нибудь All in One или Yoast обойдусь, чем это все настраивать. Но за старания спасибо!

Добавить комментарий

Подтвердите, что Вы не бот — выберите человечка с поднятой рукой: