Различия
Показаны различия между двумя версиями страницы.
| Предыдущая версия справа и слева Предыдущая версия Следующая версия | Предыдущая версия | ||
| system:apache:rewrite [2022/01/16 00:38] – mirocow | system:apache:rewrite [2022/01/16 01:07] (текущий) – [Вопрос / ответ] mirocow | ||
|---|---|---|---|
| Строка 403: | Строка 403: | ||
| Директива RewriteRule устанавливает правила перехода. Синтаксис следующий: | Директива RewriteRule устанавливает правила перехода. Синтаксис следующий: | ||
| - | RewriteRule Шаблон Подстановка [коды] | + | < |
| Директива RewriteCond | Директива RewriteCond | ||
| Директива RewriteCond определяет условия при котором выполняется правила в RewriteRule. | Директива RewriteCond определяет условия при котором выполняется правила в RewriteRule. | ||
| - | RewriteCond Сравниваемая_Строка Условие | + | < |
| Например, | Например, | ||
| Строка 415: | Строка 415: | ||
| Директива RedirectMatch в htaccess аналогична Redirect с той лишь разницей, | Директива RedirectMatch в htaccess аналогична Redirect с той лишь разницей, | ||
| - | RedirectMatch [status] Откуда Куда | + | < |
| - | Источник: | + | |
| + | ==== Вопрос / ответ ==== | ||
| + | Примеры настройки 301 редиректов в htaccess | ||
| + | |||
| + | < | ||
| + | RewriteEngine On</ | ||
| + | |||
| + | Комментарий в файле htaccess обозначается символом решётка «#» в начале строки | ||
| + | # Текстовый комментарий, | ||
| + | 301-редирект с домена без WWW на домен с WWW префиксом | ||
| + | |||
| + | < | ||
| + | RewriteRule ^(.*)$ http:// | ||
| + | |||
| + | С домена с WWW префиксом на без | ||
| + | |||
| + | < | ||
| + | RewriteRule ^(.*)$ http:// | ||
| + | |||
| + | Для HTTPS-версии: | ||
| + | |||
| + | < | ||
| + | RewriteCond % =on | ||
| + | RewriteRule ^(.*)$ https:// | ||
| + | |||
| + | Стандартный 301-редирект с одной статической страницы на другую | ||
| + | Redirect 301 /was.php http:// | ||
| + | При этом в файле htaccess, новый адрес указывать необходимо полностью с http и доменным именем. | ||
| + | В ряде случаев полезен редирект через RewriteRule | ||
| + | |||
| + | < | ||
| + | |||
| + | Настройка 301-редирект для страницы с GET параметрами | ||
| + | Скажем, | ||
| + | |||
| + | < | ||
| + | RewriteRule ^dir/ | ||
| + | </ | ||
| + | |||
| + | Если один (или несколько) из GET параметров не задан(ы) или может иметь произвольное значение (в нашем примере это SECTION_ID), | ||
| + | |||
| + | < | ||
| + | RewriteRule ^dir/ | ||
| + | |||
| + | Убираем все GET-параметры после знака вопроса (?) | ||
| + | Располагать после: RewriteBase / | ||
| + | |||
| + | 301-редирект со страницы без заданного параметра в корень | ||
| + | Если адрес имеет следующий вид: http:// | ||
| + | |||
| + | < | ||
| + | RewriteRule ^$ /? [R=301, | ||
| + | |||
| + | 301-редирект для конкретного файла, а не целой папки | ||
| + | RewriteRule ^dir/$ http:// | ||
| + | |||
| + | Как быть с доменами в зоне РФ? | ||
| + | 301-редирект с домена на домен | ||
| + | < | ||
| + | RewriteRule ^(.*)$ http:// | ||
| + | |||
| + | И для домена в зоне РФ: | ||
| + | |||
| + | < | ||
| + | RewriteRule ^(.*)$ http:// | ||
| + | |||
| + | Настройка редиректа на папки со слешем в конце / | ||
| + | Настройка редиректа на папки без слеша (убираем слеш в конце) | ||
| + | 301-редирект с домена на папку на другом домене | ||
| + | < | ||
| + | RewriteRule ^(.*)$ http:// | ||
| + | |||
| + | Редирект со всех файлов домена, | ||
| + | < | ||
| + | RewriteRule ^(.*)$ http:// | ||
| + | |||
| + | Редирект всех файлов в папке на заданный файл | ||
| + | < | ||
| + | |||
| + | Редирект файлов из заданной папки кроме, определенного файла | ||
| + | < | ||
| + | RewriteRule ^dir(.*)$ /all.php [L,R=301] | ||
| + | </ | ||
| + | |||
| + | Смена страниц с html расширения на php расширение | ||
| + | < | ||
| + | |||
| + | Перенос картинок / изображений из папки /img/ на поддомен | ||
| + | < | ||
| + | |||
| + | Задание типа индексной страницы (php, html, htm и другие) | ||
| + | Указывается порядок загрузки типов индексного файла, лежащих в корне каталога. | ||
| + | |||
| + | < | ||
| + | |||
| + | Редирект с индексной страницы php на саму папку (корень) | ||
| + | < | ||
| + | RewriteRule ^index\.php$ http:// | ||
| + | |||
| + | Для всех индексных страниц на сайте: | ||
| + | < | ||
| + | |||
| + | Редирект с поддомена на основной домен второго уровня | ||
| + | < | ||
| + | RewriteRule ^(.*)$ http:// | ||
| + | |||
| + | Редирект для заданного файла в различных директориях (папках) | ||
| + | < | ||
| + | |||
| + | Код позволяет поставить 301-редирект со всех папок вида http:// | ||
| + | |||
| + | < | ||
| + | |||
| + | Код позволяет создать копию страницы с относительным адресом / | ||
| + | |||
| + | 301-редирект с HTTPS-версии на HTTP | ||
| + | Позволяет устранить наличие дублей URL с HTTPS в индексе поисковых систем. | ||
| + | |||
| + | Перенос сайта на версию с HTTPS (для всех страниц) | ||
| + | < | ||
| + | RewriteCond % =on | ||
| + | RewriteRule ^(.*)$ https:// | ||
| + | |||
| + | Настройка 403 кода ответа сервера для реф-спама (301-редирект для спама по REFERER) для списка ресурсов | ||
| + | Настройка позволяет отклонить спамный реферальный трафик с ряда ресурсов по заголовку HTTP_REFERER. | ||
| + | |||
| + | Внимание, | ||
| + | |||
| + | < | ||
| + | |||
| + | ! Для сайтов, | ||
| + | |||
| + | < | ||
| + | header(«Location: | ||
| + | exit(); | ||
| + | ?></ | ||
| + | |||
| + | ! Оптимально настраивать все редиректы сразу на конечную страницу (без промежуточных перенаправлений, | ||
| + | |||
| + | Если требуется настроить редирект только для некоторых USER_AGENT’ов, | ||
| + | < | ||
| + | RewriteRule (.*) http:// | ||
| + | |||
| + | Если требуется настроить редирект для всех поисковых роботов (представлен список их USER_AGENT’ов) | ||
| + | < | ||
| + | RewriteRule (.*) http:// | ||
| + | |||
| + | Несколько простых редиректов | ||
| + | Редирект с www.htaccess.ru/ | ||
| + | |||
| + | < | ||
| + | RewriteRule ^component/ | ||
| + | |||
| + | Редирект с www.htaccess.ru/ | ||
| + | |||
| + | < | ||
| + | RewriteRule ^index\.php$ /? [R=301, | ||
| + | |||
| + | Синтаксис для регулярных выражений файла htaccess | ||
| + | * . — Точка заменяет произвольный символ. | ||
| + | * [abc] — обозначает перечень символов, | ||
| + | * [^abc] — перечень символов, | ||
| + | * * — означает, | ||
| + | * [abc]* — команда найдёт идущие подряд символы из заданного набора. | ||
| + | * [^abc]* — с точностью до наоборот. | ||
| + | * .* — заменяет абсолютно любой набор символов. “.*” — найдёт все подстроки между кавычками. | ||
| + | * ^ — начало строки (в том случае, | ||
| + | * $ — обозначает конец строки. | ||
| + | * \w — буква, цифра или подчёркивание _. | ||
| + | * \d — заменяет любую цифру. | ||
| + | * \D — заменяет любой символ, | ||
| + | * 9 — заменяет любую цифру. | ||
| + | * [a-z] — любая буква от a до z (весь латинский набор символов) в нижнем регистре. | ||
| + | * [A-Z] — любая буква от A до Z в ВЕРХНЕМ регистре. | ||
| + | * [a-zA-Z] — любая буква от a до Z в любом регистре. | ||
| + | * [a-Z] — то же самое. | ||
| + | |||
| + | ❓Как сделать 301 редирект папки | ||
| + | Сделать переадресацию папки необходимо в нескольких случаях – если вы перемещаете её в пределах сайта для сокращения url и оптимизации структуры, | ||
| + | |||
| + | Редирект в пределах сайта | ||
| + | В первом случае сокращается адрес folder, поэтому структура становится более понятна ботам. Также можно собрать в одном месте материалы одной темы, что хорошо для оптимизации сайта. Например, | ||
| + | |||
| + | И нужно, чтобы она открывалась по адресу: | ||
| + | |||
| + | При этом важно сохранить урл, изменив только папку корня, то есть, все страницы за folder-storage-directory должны открываться после folder-shipping. | ||
| + | |||
| + | Проще говоря, | ||
| + | |||
| + | А надо чтобы она открывалась по адресу: | ||
| + | |||
| + | Поможет в этом код: | ||
| + | |||
| + | В результате адрес сокращается и структура сайта более понятна ботам. Также плюшка оптимизации. | ||
| + | |||
| + | Редирект папки на поддомен | ||
| + | Иногда требуется переадресация папки на поддомен. Такая неприхотливая нужда возникает, | ||
| + | |||
| + | Предположим, | ||
| + | |||
| + | И надо сделать редирект 301 на: | ||
| + | |||
| + | Поможет в этом код в htaccess: | ||
| + | |||
| + | < | ||
| + | |||
| + | Так можно перенести с основного сайта на поддомены всё ненужное, | ||
| + | |||
| + | Для использования кодов просто замените в нём домен и папки на свои директории и вставьте в htaccess. Делаете редирект с одинаковым успехом на Joomla и других движках. | ||
| + | |||
| + | Источник | ||
| + | |||
| + | .htaccess | ||
| + | При изменении файла новый набор настроек сразу начинает работать и не требует перезагрузки web-сервера. | ||
| + | |||
| + | |||
| + | Провайдер хостинга может запретить применение определенных директив в целях безопасности или снижения нагрузки на сервер. Названия директив может меняться, | ||
| + | |||
| + | Директива должна иметь вид: | ||
| + | |||
| + | < | ||
| + | AllowOverride All | ||
| + | Require all granted</ | ||
| + | |||
| + | /var/www/ по необходимости нужно заменить на свою директорию сайта. | ||
| + | |||
| + | После внесения изменений не забудьте перезагрузить веб-сервер, | ||
| + | |||
| + | Если вывод будет Syntax OK, то выполните: | ||
| + | |||
| + | Провайдеры по умолчанию включают эту настройку для папок с сайтами пользователей на виртуальном хостинге, | ||
| + | |||
| + | Каждая строка файла означает определенную команду конфигурации (директиву) Apache. | ||
| + | |||
| + | Пустые строки игнорируются. | ||
| + | |||
| + | Для этого нажмите правой кнопкой мыши на файл, чтобы открыть контекстное меню с пунктом “Просмотр/ | ||
| + | |||
| + | |||
| + | Filezilla использует для редактирования текстовый редактор Notepad++, который должен быть установлен на локальный компьютер. | ||
| + | |||
| + | |||
| + | В случае, | ||
| + | |||
| + | |||
| + | Ниже будут рассмотрены наиболее востребованные из настроек в контексте web-хостинга. | ||
| + | |||
| + | Механизм перенаправления (редиректа) запросов | ||
| + | Затем следует перечень специальных команд для настройки перенаправления, | ||
| + | |||
| + | В своей работе механизм перенаправления mod_rewrite применяет специальную технологию программирования regexp для сравнения запросов с определенным шаблоном. | ||
| + | |||
| + | Склейка разных адресов одного сайта | ||
| + | < | ||
| + | RewriteCond % ^www.mysite\.ru$ [NC] | ||
| + | RewriteRule ^(.*)$ http:// | ||
| + | |||
| + | 1. Указание основного зеркала | ||
| + | Предназначен для того, чтобы преобразовать домен с www на URL без www. Достаточно ввести правило: | ||
| + | |||
| + | < | ||
| + | RewriteCond %{HTTP_HOST} ^www.название_вашего_сайта\ru$ [NC] # | ||
| + | RewriteRule ^( *)$ http:// | ||
| + | 2. Перенос на https | ||
| + | На сегодняшний день поисковик Google активно призывает владельцев сайтов к использованию безопасного соединения, | ||
| + | |||
| + | < | ||
| + | RewriteCond %(HTTPS) !on | ||
| + | RewriteRule (.*) https:// | ||
| + | 3. Проставление слеша в конце адреса | ||
| + | Если вы не хотите, | ||
| + | |||
| + | < | ||
| + | RewriteRule ^(.+[^/])$ %{REQUEST_URI}/ | ||
| + | Выполнив данную команду, | ||
| + | |||
| + | 4. Перенос домена | ||
| + | Изменив название сайта, не забудьте в .htaccess указать: | ||
| + | |||
| + | < | ||
| + | RewriteCond %{HTTP_HOST} ^www\.yoursite.ru\.ru$ [NC] | ||
| + | RewriteRule ^(.*)$ http:// | ||
| + | Оптимизируя сайт и под Яндекс, | ||
| + | |||
| + | < | ||
| + | RewriteCond %{REQUEST_FILENAME} robots.txt$ [NC] | ||
| + | RewriteRule ^([^/]+) $1 [L] | ||
| + | RewriteCond %{HTTP_HOST} ^mysite\.ru | ||
| + | RewriteRule ^(.*)$ http:// | ||
| + | |||
| + | 5. Запретные команды для поискового бота | ||
| + | В .htaccess, так же, как и в robots.txt, можно закрыть доступ к сайту для роботов поисковых систем: | ||
| + | |||
| + | < | ||
| + | RewriteCond %{USER_AGENT} Googlebot | ||
| + | RewriteRule .* - [F] # F – выдает ошибку 403 – запрещено для сканирования</ | ||
| + | |||
| + | 6. Редирект с одного сайта на другой | ||
| + | |||
| + | < | ||
| + | RewriteCond %{HTTP_HOST} domain1.ua | ||
| + | RewriteRule (.*) http:// | ||
| + | |||
| + | Редирект с www на без www | ||
| + | |||
| + | < | ||
| + | RewriteEngine On | ||
| + | RewriteCond %{HTTP_HOST} ^www\.(.*) [NC] | ||
| + | RewriteRule ^(.*)$ http:// | ||
| + | |||
| + | Или более понятный синтаксис | ||
| + | |||
| + | < | ||
| + | RewriteEngine On | ||
| + | RewriteCond %{HTTP_HOST} ^www.domain\.com$ [NC] | ||
| + | RewriteRule ^(.*)$ http:// | ||