Много редиректов в htaccess
Много редиректов в htaccess
Google улучшил новую систему генерации заголовков в SERP
State of SEO 2021: бюджеты, приоритетные задачи и изменения в трафике
Есть необходимость создать около трех тысяч редиректов.
Сервер с ума не сойдет, приходилось видить и по 60к. Но это говорить об неправильно написанном ПО.
Но это говорить об неправильно написанном ПО
Сайт на инклудах и статике, с сильно запущенной структуризацией. Есть необходимость под двиг, а заодно и со структурой разобраться.
скорее всего можно обойтись директивой RedirectMatch либо RewriteRule + скрипт
Я припоминаю, что у апача был модуль, редиректящий по хэшу в файле. Это будет экономней, наверно, по ресурсам.
Смотря чем вызвана необходимость в таком количестве правил?! Если именно в вашем случае другого выхода нет, то НОРМАЛЬНО. Но лучше подумать о переработке двигуна, структуры сайта и т.п.
Много редиректов в htaccess
Обратите внимание, что частично или полностью, некоторая информация из данных примеров могла потерять свою актуальность в связи с изменениями версий используемого ПО.
Содержание
Mod_rewrite — модуль, используемый веб-серверами для преобразования URL’ов.
Простой редирект
/old/old.htm — путь и имя старой страницы,
http://www.you.com/new.htm — новый путь и новое имя перемещенной страницы.
Редирект на любую страницу по ip пользователя или при запросе конкретной страницы (а также по маске имени)
Если у пользователя ip 192.152.37.125, то он будет перенаправлен на страницу user.php :
Использование mod_rewrite
Редирект с регулярным выражением
Если необходимо сделать различное перенаправление для отдельных страниц, можно использовать следующее:
RedirectMatch Permanent — это эквивалент «RedirectMatch 301», строка с *(Wildcard) должна быть последней в этом списке.
Создание удобно читаемых URL
Чтобы преобразовать, например, www.site.ru/product.php?id=123 в www.site.ru/product/123 поступите следующим образом:
В следующем примере преобразуем www.site.ru/script.php?product=123 в www.site.ru/cat/product/123/:
Редирект на PHP
Надо создать страницу при обращении к которой будет происходить редирект и разместить её на сервере. Лучше укажите HTTP/1.1 (а не HTTP/1.0 или HTTP/0.9, которые не поддерживают виртуальный хостинг).
Редирект всех файлов в папке на один файл
Редирект динамического URL на новый файл
Данный вариант пригодится, если вы хотите редиректить динамический URL с параметрами на новый статический файл.
Массовый редирект новых файлов
Теперь перейдем к самому сложному моменту, когда вам надо редиректить массу URL-ов, например после смены вашей CMS.
И в-третьих, при внесении такого количества информации высока вероятность, что вы где-то ошибетесь.
Поэтому, самый лучший выход — нанять программиста, который вам напишет динамический редирект. Нижеприведенный пример написан на PHP, но так же может быть выполнен на любом языке.
Предположим, вы перешли на новую систему ссылок на вашем сайте и все файлы оканчивающиеся на старый id должны быть средирекчены. Сначала создаем в базе таблицу, которая содержит старый id и новый URL для редиректа. old_id INT new_url VARCHAR (255) Далее пишем код который свяжет ваши старые id с новыми URL-ами
Редиректы в зависимости от времени
Когда нужно применять уловки, типа содержания зависящего от времени, масса вебмастеров все ещё используют CGI-скрипты, которые производят редиректы на специальные страницы.
Как это может быть сделано через mod_rewrite? Есть много переменных названных TIME_xxx для условий редиректа. В связке со специальными лексикографическими образцами для сравнения STRING и =STRING мы можем производить редиректы зависящие от времени:
Убираем у всех запросов вначале «WWW.»
Иногда бывает так, что у вас статичный веб-сайт, а вам необходимо, чтобы на нем срабатывал какой-нибудь php-скрипт. Для этого вам необходимо сказать серверу, чтобы он обрабатывал эту страницу как php-файл.
Этот прием можно использовать и для других расширений файлов:
Запрещение доступа в конкретную директорию
Запрещаем доступ для всех ко всем файлам в директории deny from all
к конкретному файлу:
по ip пользователя:
Доступ в данную директорию будет разрешён только пользователю с ip 192.152.37.125.
И наоборот, если хотите запретить отдельным ip пользователей доступ к вашему сайту, то пропишете следующие строчки:
Запрет доступа к файлам с несколькими типа расширений
) в опциях директивы. Синтаксис следующий: [тильда] [пробел] [далее_все_без_пробелов] Чтобы блокировать этот доступ, запишем следующее:
Конструкция ^.htaccess$ в этом регулярном выражении означает:
Имя файла должно быть расположено точно между начальным и конечным якорем. Это будет гарантировать то, что только это определенное имя файла (и никакое другое) сгенерирует код ошибки.
Определение кодировки
Определение кодировки, в которой сервер «отдает» файлы
Варианты: KOI8-R, UTF-8, Windows-1251
Определение кодировки на загружаемые файлы
Пароль на директорию
Свои страницы ошибок
IE игнорирует страницы размером меньше 512 байт.
Индексация директорий и поддиректорий
Чтобы избежать индексации поисковыми системами директорий и поддиректорий, необходимо прописать, например, такую строку:
Эта директива задает файл, который будет вызван при обращении к директории без указания имени файла.
DirectoryIndex index.html index.php index.shtml
Защита изображений
Часто веб-мастера нагло копируют контент с вашего сайта вместе с рисунками, причем рисунки подгружаются с вашего же сервера. Это создает лишний трафик, что, зачастую, приводит к ряду проблем.
Защититься от таких веб-мастеров и не помешать поисковым роботам индексировать изображения достаточно просто:
Еще один варинат запрета доступа к картинкам с неразрешенных сайтов:
Поисковые машини и разного рода сканеры создают коллосальный трафик на вашем сайте. Нижеприведенный блок кода позволит запретить доступ ботам на сайт.
Обращения к robots.txt
PHPSESSID
Для отключения добавления PHPSESSID к URL вставьте в начало index.php:
Если вам все это показалось сложным, воспользуйтесь готовым сервисом преобразования динамических URL в статические с помощью htaccess.
Директивы кеширования
Кэширование для всех типов файлов по времени доступа
Кэширование для всех типов файлов по времени изменения
Кэширование для определённых типов файлов
Запрет кеширования с помощью сервера Apache
Необходимые заголовки будут передаваться автоматически и специально писать их в PHP уже не нужно — кэш уже выключен!
Будьте осторожны при кешировании, т.к. при изменении файла пользователь может получить новый вариант только через 3 дня!
Поиск страниц больше чем в одном каталоге
Иногда необходимо позволить веб-серверу искать страницы больше, чем в одном каталоге.
RewriteEngine on
Поддомены для пользователей
Если Вы хотите предоставлять адреса www.subdomain.domain.ru для страниц пользователей, вы можете использовать следующий набор правил для преобразования http://www.subdomain.domain.ru/path во внутренний путь /home/login/path :
Повреждение бинарного файла
Если при передаче файлов через формы (при указанном enctype=«multipart/form-data» ) бинарные данные повреждаются, пропишите в /cgi-bin/.htaccess директиву:
Ошибка SWF файлов
Такое может происходить из-за установленного модуля в Apache. По умолчанию он блокирует в запросах строки с SQL аргументами и другими потенциально опасными командами.
Возможные сообщения об ошибке:
Forbidden You don’t have permission to access /adm/index.php on this server. Additionally, a 404 Not Found error was encountered while trying to use an ErrorDocument to handle the request.
Запрос небезопасен и был отвергнут.
Для сообщения: «POST /wp-admin/async-upload.php HTTP/1.1» 406 354 «-» «Shockwave Flash» можно снять защиту только на загрузку файлов на сервер:
Оптимально снимать защиту только с той папки, в которой это необходимо, не убирая защиту со всего сайта.
Склейка страницы (301)
Чтобы предотвратить ситуацию с индексированием страниц www.yoursite.ru/about и www.yoursite.ru/about/ как разных, ставим следующий код:
Со страниц без слэша будет установлен редирект на «слэшевые».
Принудительная постановка замыкающего слеша
Следующий код всегда будет добавлять слеш в адрес URL вашего сайта, что хорошо помогает в области SEO сайта:
Загрузка файлов вместо открытия
Сжатие страниц
Междоменные шрифты для FF
PHP в JavaScript
Разложить файлы robots.txt, sitemap.xml и т.п. в папки доменов
Если есть запрашиваемый файл из корня сайта, в папке домена, то перенаправляем его туда:
Блокируем User Agents
Переадресация по языку
Переадресация с http на https
Защита картинок от скачивания по ссылкам на других сайтах
Включая переходы без REFERER, т.е. когда адрес указывают в строке браузера:
Только по ссылкам на чужих сайтах:
Блокировка пользователей с определенным рефером
Если вы не хотите, чтобы пользователи переходя с определенных сайтов попадали на ваш, вы можете это запретить:
Благодаря «RewriteBase /» удобнее делать преобразования URI (убирается привязка к физическому расположению файлов сайта на сервере).
Давайте рассмотрим самые распространенные примеры:
1. Простой редирект
Для простого редиректа условия задавать не обязательно, только правило.
2. Реврайт без редиректа
Иногда требуется, чтобы был редирект без смены адреса, т.е. реврайт без редиректа. Для этого просто не указываем флаг редирект (R), и получаем желаемый результат, теперь по адресу news/happy получим news.html, а в адресной строке останется news/happy
3. Редирект с сохранением рейтинга страницы
4. Редирект для домена с www.site.com на site.com
Убираем у всех запросов вначале «WWW.»
5. Редирект для домена с site.com на www.site.com
6. Редирект с index.php (html,htm) на главную страницу
7. Редирект с index.html на папку (удаление из строки браузера index.html)
9. Чтобы вместо page.htm загружался файл page.html
10. Переезд с одного домена на другой
11. Редирект всех файлов в папке на один файл
12. Задание типа индексной страницы (php, html, htm и другие)
Указывается порядок загрузки типов индексного файла, лежащих в корне каталога.
13. Убираем у всех запросов в конце index.php. Переадресуем на страницу без index.php
Поисковые системы плохо относятся к дубрям страниц. Чтобы этого избежать нужно удалить (склеить) страницы вида https://ваш_домен/ и https://ваш_домен/index.php
14. Определение кодировки, в которой сервер «отдает» файлы
Варианты: KOI8-R, UTF-8, Windows-1251
15. Определение кодировки на загружаемые файлы
Варианты: KOI8-R, UTF-8, Windows-1251
16. Кэширование для всех типов файлов по времени доступа
17. Кэширование для всех типов файлов по времени изменения
18. Кэширование для определённых типов файлов
19. Главная страница без дублирования
20. Редирект страниц без слэша в конце URL на слеш
Чтобы предотвратить ситуацию с индексированием страниц www.site.com/about и www.site.com/about/ как разных, ставим следущий код: Со страниц без слэша будет установлен редирект на «слэшевые».
21. Принудительная постановка замыкающего слеша
Следующий код всегда будет добавлять слеш в адрес URL вашего сайта, что хорошо помогает в области SEO сайта.
22. Удалить слеш в конце
23. Удаляем «category» из URL
24. Редирект URL страницы с папки в корень сайта
Например страница лежит на сервере в site.com/category/blue.html, но надо чтобы страница работала по запросу site.com/blue.html
25. Редирект от GET параметров
Например, нужно что бы со страницы /?action=page&id=15 был редирект на /page/15/
26. Редирект на мобильную версию сайта
Допустим, что мобильная версия расположена на поддомене m.site.com. Будем переходить на мобильную версию только с главной страницы основного домена.
Первой строкой мы проверяем USER_AGENT, определяем что он относится к мобильникам. (эту строку я детально не проверял, взял на просторе интернета, возможно она не совсем корректная, или есть более универсальная строка. Но на моих мобильных устройствах этот пример работает)
Второй строкой проверяем что мы находимся на нужном домене (т.к. пример не универсальный)
Третьей строкой, мы проверяем, что находимся на главной страницы (без всяких параметров и прочего) и перенаправляем на поддомен.
27. Редирект на мобильную версию сайта (Универсальная версия)
28. Обработка ошибок Apache
29. Сохранение (загрузка) файлов вместо открытия
30. Переадресация с www.site.com/index.php?idc=4&marea=6 на www.site.com/
31. Редирект с поддомена на основной домен второго уровня
32. Изменяем переменные php и передаём обработку другому скрипту.
33. Убираем переменные php из запроса
(вырезаем из URI всё, что находится после знака вопроса)
34. Заперт входа на сайт
Запрещаем вход на сайт Интернет Експлореру (вернее, кто себя так определяет) и пользователям с определённого IP-адреса (xxx.xxx.xxx.xxx).
35. Закрываем от всех
36. Закрываем конкретный файл от всех
37. Разрешаем доступ только с одного ip
38. Запрещаем доступ с конкретных ip
39. Убираем из Урла (URL) расширение файла
php можно заменить другим расширением. Например: html, htm, shtml, asp
41. Запрещаем отображать содержимое директории, если нет индексного файла
Вы скорее всего хоть раз видели текст Index of и список файлов. Так происходит в том случае, когда в директории нет индексного файла (например index.php), а система предлагает выбрать файл для дальнейшего открытия. Минус этого заключается в том, что случайный пользователь может увидеть список и содержание всех файлов директории.
42. Перенаправление с HTTPS на http
43. Редиректы в зависимости от времени
Когда нужно применять уловки типа содержания зависящего от времени масса вебмастеров все ещё используют CGI скрипты которые производят редиректы на специальные страницы. Как это может быть сделано через mod_rewrite?
Есть много переменных названных TIME_xxx для условий редиректа. В связке со специальными лексикографическими образцами для сравнения STRING и =STRING мы можем производить редиректы зависящие от времени:
Это выдает содержимое foo.day.html при запросе URL foo.html с 07:00 до 19:00 а в оставшееся время содержимое foo.night.html.
44. Редирект в URL с подчеркивания в дефис
45. Редирект в URL с больших символов на маленькие
46. Массовый редирект новых файлов
Предположим вы перешли на новую систему ссылок на вашем сайте и все файлы оканчивающиеся на старый id должны быть средирекчены. Сначала создаем в базе таблицу, которая содержит старый id и новый URL для редиректа.
old_id INT new_url VARCHAR (255)
Где искать и как редактировать
.htaccess — общепринятое и самое популярное название, но не обязательное (оно задается в файле httpd.conf). Несмотря на непривычное название, создавать и редактировать файл можно в любом текстовом редакторе.
Некоторые CMS дают возможность редактировать файл через административную панель. В Битриксе его легко можно найти в разделе Контент — Файлы и папки:
Синтаксис файла простой: каждая директива (команда) начинается с новой строки, после знака # можно добавлять комментарии, которые не будут учитываться сервером. Изменения на сайте вступают в силу сразу, перезагрузка сервера не требуется.
Правила задаются в том числе при помощи регулярных выражений. Для того, чтобы их прочитать, нужно понимать значение спецсимволов и переменных. Расшифруем самые часто используемые.
Основные спецсимволы:
Основные переменные:
Настраиваем редиректы для SEO
При настройке 301 редиректов помните о двух правилах:
1. Настраиваем постраничные 301 редиректы
Это потребуется в следующих случаях:
Просто удалить страницу — плохая идея, лучше не отдавать роботу ошибку 404, а перенаправить его на другой URL. В этом случае есть шанс не потерять позиции сайта в выдаче и целевой трафик. Настроить 301 редирект с одной страницы на другую можно при помощи директивы простого перенаправления:
2. Избавляемся от дублей
Каждая страница сайта должна быть доступна только по одному адресу. Для этого должны быть настроены:
Переадресация на слеш или наоборот
Настроить ли переадресацию на страницы со слешем или без, в каждом случае нужно решать индивидуально. Если у сайта уже накоплена история в поиске, анализируйте, каких страниц в индексе больше. Для новых сайтов обычно настраивают редирект на слеш. Проверить, не настроена ли переадресация по умолчанию, просто: удалите/добавьте слеш в конце URL. Если страница перезагрузится с новым адресом — мы имеем дубли, требуется настройка. Если URL подменяется — все в порядке. Проверять лучше несколько уровней вложенности.
Код 301 редиректа на слеш:
Код 301 редиректа на страницы без слеша:
3. Настраиваем главное зеркало
Редирект на HTTPS
Определять, с «www» или без будет главное зеркало, можно несколькими способами:
После того как выбор сделан, воспользуйтесь одним из двух вариантов кода.
Редирект с www на без www
Редирект с без www на www
4. Перенаправляем с одного домена на другой
Самая очевидная причина настройки этого редиректа — переадресовать роботов и пользователей на другой адрес при переезде сайта на новый домен. Также им пользуются оптимизаторы для манипуляций ссылочной массой, но дроп-домены и PBN — серые технологии продвижения, которые в рамках этого материала мы затрагивать не будем.
Воспользуйтесь одним из вариантов кода:
Не забудьте поменять в коде «mysite1» и «mysite2» на старый и новый домен соответственно.
Модуль SEO в системе Promopult: для тех, кто не хочет тонуть в рутине. Все инструменты для улучшения качества сайта и поискового продвижения, автоматизация процессов, чек-листы, подробные отчеты.
Обеспечиваем безопасность сайта
5. Запрещаем загрузку картинок с вашего сайта
Существуют технологии, при которых сторонние сайты используют контент, в том числе изображения, загружая его прямо с вашего хостинга путем хотлинков (прямых ссылок на файлы). Это не только обидно и нарушает авторские права, но и создает ненужную дополнительную нагрузку на ваш сервер.
Осадите воришек при помощи этого кода:
6. Запрещаем доступ
Для нежелательных User Agents (ботов)
Список юзер-агентов можно дополнять, сокращать или создать свой. Перечень хороших и плохих ботов можно посмотреть здесь.
Частный случай такого запрета — запрет для поисковых роботов. Если вас почему-то не устраивает правило в robots.txt, можно запретить доступ, например, роботу Google при помощи таких директив:
Для всех, кроме указанных IP
Не забываем заменить «https://mysite.com» на адрес вашего сайта и вписать IP-адреса вместо IP1, IP2 и т.д.
Для определенных IP-адресов
Для подсети
Вписываем маску сети в строку после «deny from».
Спамные IP-адреса можно вычислить в логах сервера или с помощью сервисов статистики. В административной панели WordPress отображаются IP-адреса комментаторов:
К определенному файлу
Вписываем название файла вместо «myfile.html» в примере. Пользователю будет показана ошибка 403 — «доступ запрещен».
Для сайтов на WordPress важно ограничить доступ к файлу wp-config.php, т.к. в нем содержится информация о базе данных:
Для пользователей, пришедших с определенного сайта
Вы можете заблокировать посетителей с нежелательных ресурсов (например, со взрослым или шокирующим контентом).
7. Защищаем доступ к определенному файлу или папке
Защита паролем файла
Защита паролем папки
8. Запрещаем выполнение вредоносных скриптов
Следующая группа директив защищает сайт от так называемых «скриптовых инъекций» — инструмента хакерских атак:
Все попытки причинить вред вашему ресурсу будут перенаправлены на страницу ошибки 403 «доступ запрещен».
9. Защищаем сайт от DOS-атак
Один из способов защиты — ограничить максимально допустимый размер запроса (ограничение отсутствует по умолчанию).
В примере указан размер 10 Мбайт. Если вы хотите запретить загрузку файлов, пропишите число меньше 1 Мбайт (1048576 байт).
Также можно изучить возможности директив LimitRequestFields, LimitRequestFieldSize и LimitRequestLine в официальной документации.
Настраиваем отображение сайта
10. Заменяем индексный файл
Индексный файл — тот, что открывается по умолчанию при обращении к определенному каталогу. Обычно они называются: index.html, index.htm, index.php, index.phtml, index.shtml, default.htm, default.html.
Вот как это выглядит в структуре каталога:
Вместо «hello.html» вписывайте адрес желаемого файла.
Можно задать последовательность файлов, которые будут открываться в указанном порядке, если один из них будет недоступен:
11. Добавляем или убираем html в конце URL
Сохранять или убирать расширение файлов в URL — дело вкуса каждого оптимизатора. Достоверных исследований влияния расширений в адресах на ранжирование ресурса нет, но каждый вебмастер имеет свое мнение по этому поводу.
Этими же директивами можно добавить/убрать расширение php.
12. Настраиваем кодировку
Чтобы избежать ошибок в отображении ресурса браузером, нужно сообщить ему, в какой кодировке создан сайт. Самые популярные:
Чаще всего используют UTF-8 и Windows-1251.
Пример директивы, которая задает для файла кодировку UTF-8:
А такая команда означает, что все загружаемые на сервер файлы будут преобразованы в Windows-1251:
В примерах приведены разные кодировки, но в рамках одного сайта кодировки в этих директивах должны совпадать.
13. Создаем кастомные страницы ошибок
Перед тем, как прописывать директивы, создайте в корне сайта папку error и разместите туда соответствующие файлы для страниц ошибок.
Зачем это нужно? Например, чтобы не потерять пользователя на странице 404, а дать ему возможность перейти в другие разделы сайта:
Оптимизируем работу сайта
14. Сжимаем компоненты сайта при помощи mod_gzip или mod_deflate
Синтаксис модуля Gzip более гибкий и он умеет работать с масками:
В mod_deflate вы перечисляете типы файлов, которые нужно сжать:
15. Усиливаем кэширование
Этот комплекс команд поможет быстрой загрузке сайта для тех посетителей, которые уже на нем были. Браузер не будет заново скачивать картинки и скрипты с сервера, а использует данные из кэша.
В примере срок жизни кэша ограничен одной неделей («1 week»), вы можете указать свой срок в месяцах (month), годах (year), часах (hours) и т.д.
Другой вариант кода:
Для кэширования доступны следующие типы файлов:
Еще несколько возможностей
16. Управляем настройками php
Этот комплекс настроек выполняют программисты, если нет доступа к файлу php.ini. Остановимся на выражениях php_value, которые отвечают за объем загружаемых на сайт данных и время обработки скриптов, т.к. это напрямую влияет на производительность.
В строке «upload_max_filesize» указываете максимальный размер загружаемых файлов в мегабайтах, «post_max_size» означает максимальный объем постинга, «max_execution_time» указывает время в секундах на обработку скриптов.
17. Боремся со спам-комментариями на WordPress
Вместо «mysite.com» впишите адрес вашего сайта.
18. Устанавливаем e-mail для администратора сервера
19. Предупреждаем о недоступности сайта
IP-адрес в примере (12\.345\.678\.90) замените на свой, в последней строке укажите адрес страницы вашего ресурса с информацией о характере и сроках завершения работ.