Htaccess www редирект: 301 редирект в файле htaccess — детальная инструкция по применению

Содержание

Редирект 301 с www на без www через .htaccess

8859 Посещений

Одним из самых популярных и часто задаваемых вопросов пользователей, есть 301 редирект или переадресация между доменами. То есть, наши клиенты спрашивают, как правильно сделать переадресацию с одного домена на другой. Для начала, стоит выделить причины, по которым возникает вопрос о переадресации.

  1. Одной из самых популярных причин есть то, что сайт пользователя открывается через 2 адреса, то есть: www.3tovarа.ua  и 3tovara.ua. По сути, это один и тот же сайт, но поисковые машины видят его как 2 разных источника. Поэтому, нужно сделать редирект между доменами: когда пользователи будут запрашивать страницы сайта с www будет идти переадресация на эти же страницы сайта только без www или наоборот.
    (.*)$ http://%1/$1 [L,R=301]

    После сохранения изменений, например при таком запросе, 

    мы получаем такой результат. 

    Редирект с HTTP на HTTPS-версию сайта: как настроить, способы настройки перенаправления через htaccess

    Содержание

    1. Что такое 301 редирект
    2. 301 редирект для SEO
    3. Пошаговая настройка
    4. Настройка через файл .htaccess
    5. Склейка зеркал сайта
    6. Постраничный редирект
    7. Изменение домена
    8. Редирект на страницу с другим url (без параметров)
    9. Редирект для url (с параметрами)
    10. Редирект с index.php на главную
    11. Редирект со страниц со слешем на страницы без слеша (для всего сайта)
    12. Редирект со страниц без слеша на слеш (для всего сайта)
    13. Постоянный редирект для Nginx
    14. Редирект для PHP
    15. Редирект 301 в разных панелях управления хостингом
    16. Редирект для популярных CMS
    17. Автоматическое создание кода

    Вопросы интернет-безопасности с каждым днем становятся все более актуальными. Именно с этим связана тенденция перевода крупных порталов, сайтов, блогов, интернет-магазинов и других ресурсов с традиционного протокола HTTP на более безопасный HTTPS.

    После того, как вы подготовили сайт к переносу на HTTPS, устранили возможные технические ошибки и купили SSL-сертификат, необходимо перенаправить всех посетителей, которые обратились по незащищенному протоколу HTTP, на безопасную версию сайта по протоколу HTTPS. Сделать это можно с помощью 301-редиректа.

    Что такое 301 редирект

    Редиректом называется процесс, при котором посетитель сайта автоматически перенаправляется с устаревшей страницы на актуальную (адрес может содержать http, https, www). Есть два варианта выполнения редиректа — на сервере и в браузере. Серверный редирект предпочтительнее, поскольку он не тормозит загрузку страниц.

    301 редирект для SEO

    Как уже было сказано ранее, протокол HTTPS — полезное и эффективное решение для безопасной передачи данных. Но массовое внимание он получил после того, как Google начал использовать критерий наличия редиректа с http на https для ранжирования страниц в поиске.

    Корректно настроенный 301 редирект необходим для эффективного SEO-продвижения ресурса. Грамотно перемещенная страница не теряет позиций в выдаче и сохраняет свой прежний вес.

    Рекомендуемые решения

    Пошаговая настройка

    Настроить редирект можно двумя способами — с помощью панели управления или файла .htaccess.

    Настройка через файл .htaccess

    Чтобы страницы с http автоматически перенаправляли пользователя на https, необходимо провести работу в файле .htaccess, который расположен в корневой папке сайта.

    Что делать, если. htaccess отсутствует? Его нужно сделать и добавить код (без указания доменного имени):

    RewriteEngine on

    RewriteCond %{HTTP:X-Forwarded-Protocol} !=https

    RewriteRule . https://%{SERVER_NAME}%{REQUEST_URI} [R=301,L]

    Затем вбейте в адресную строку вашдомен.ru и убедитесь, что вас автоматически перенаправляет на https:/вашдомен.ru. Цель достигнута!

    Обратите внимание на то, что файл .htaccess обеспечивает редирект только при наличии точки. Без нее редирект просто не будет работать.

    Иногда после перехода на https происходит сбой шрифтов. Ничего страшного. У каждой страницы сайта есть код, содержащий надпись с установкой шрифта. Как правило, эта надпись содержит http. Найдите надпись <script src=»http://ajax. (.) scheme: //www.host1 permanent;

    }#…

    }

    Сохранив изменения, перезапустите сервер с помощью команды «service nginx restart».

    Редирект для PHP

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

    Алгоритм действий:

    1. Загрузка на жесткий диск файла index.php.
    2. Генерирование кода.
    3. Занесение кода в текстовый файл с последующим сохранением и загрузкой на сервер.
    4. Указание основного URL в настройках сайта.

    Рекомендуемые решения

    Редирект 301 в разных панелях управления хостингом

    Cpanel

    Чтобы сделать 301 редирект Cpanel, выполните следующее:

    1. Зайдите в блок «Домены» и выберите «Перенаправления».
    2. Найдите строку «Тип», выберите «Постоянный 301».
    3. Когда появится выпадающий список, в строке https://www выберите домен сайта (к примеру, example.ru).
    4. Напишите в строке «Перенаправляет на» адрес http://example.ru.
    5. После этого в блоке «Перенаправление www» найдите пункт «Перенаправлять только с www» и поставьте галочку.
    6. Кликните «Добавить», чтобы изменения сохранились.

    ISPmanager

    Для редиректа в этой панели можно работать с файлами nginx.config или .htaccess, а можно воспользоваться встроенным механизмом переадресации. Чтобы настроить переход с http на https зайдите в раздел «WWW-домены» и снимите галочку в нужном пункте.

    Beget

    Средства этой панели управления не предназначены для редиректа 301. Установить редирект можно, воспользовавшись файлом .htaccess.

    Редирект для популярных CMS

    WordPress

    Чтобы создать постоянный редирект для этой CMS, разработано множество плагинов, например, Quick Page, Safe Redirect Manager, Redirection и др.(.) http://sng-it.ru/1 [R=301,L]

    Автоматическое создание кода

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

    Чтобы поисковая система распознавала два разных адреса как один сайт, должна исправно работать постоянная переадресация. Для оптимизации сайта, устранения неполадок и недоработок есть надежный инструмент — 301 редирект.

    Пользуйтесь этим инструментом осторожно и с умом, чтобы не вызвать сбой в работе и не потерять позиции сайта в поисковиках.

    301 редирект через .htaccess и еще 18 настроек файла .htaccess

    Оптимизаторы используют файл .htaccess, чтобы корректно настроить 301 редирект. На самом деле этот файл может сделать гораздо больше для корректной работы вашего сайта – улучшить безопасность и параметры отображения.

    Название происходит от англ. hypertext access (доступ к гипертексту). Благодаря .htaccess можно менять настройки наиболее популярного типа веб-серверов Apache или аналогичных. Далее вы можете ознакомиться с применением файла для других целей и увидеть примеры кода.

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

    Файл позволяет оптимизатору более гибко настроить сервер. Не советуем задавать в .htaccess правила, если вы можете работать с главным конфигурационным файлом сервера .httpd.conf либо apache.conf. Эти 2 файла не дают запросам перегружать сервер и быстрее их применяют. Но во многих случаях оптимизатор не имеет доступа к указанным файлам, скажем, на виртуальном хостинге. В таком случае необходимые настройки прописываются через .htaccess.

    Благодаря .htaccess можно оптимизировать сайт:

    Ищем и редактируем .htaccess

    Находясь в корневой директории, команды .htaccess будут распространяться на весь ресурс. Но если разместить файл в любом другом каталоге, то он будет «командовать» только этой папкой. То есть вполне допустимо более одного .htaccess на сайте. Более приоритетным считается файл в каталоге, не из корневой папки.

    Файл .htaccess можно переименовать. Создание и редактирование доступно из любого текстового редактора. В некоторых CMS работать с файлом можно через админпанель. Для Битрикса поиск тоже прост – «Контент», далее «Файлы и папки».

    Для WordPress’а редактирование возможно благодаря модулям плагинов All in One SEO Pack и Yoast SEO.

    В случае отсутствия .htaccess следует создать его через текстовый редактор и разместить в корневом каталоге сайта или любом другом.

    Синтаксис файлов

    Он несложный: новые команды следует начинать с новой строки. Символ # позволяет писать комментарий, не учитываемый сервером. Для применения новых команд не нужно перезагружать сервер.

    Также можно использовать регулярные выражения для правил. Для этого нужно понимание значений переменных и специальных символов.

    Основные специальные символы:

    • ^ – начало строки.
    • $ – конец строки.
    • . – любой символ.
    • * – любое количество любых символов.
    • ? – один конкретный символ.
    • [4–8] – последовательность символов, к примеру, от 4 до 8.
    • | – символ «или».
    • () – выбор группы символов.

    Основные переменные:

    • %{HTTP_USER_AGENT} – поле User-Agent, полученное от браузера пользователя.
    • %{REMOTE_ADDR} – IP-адрес юзера.
    • %{REQUEST_URI} – запрашиваемый URI.
    • %{QUERY_STRING} – параметры запроса после ?.

    Если вам нужно больше информации, доступно полное руководство, а также отличный сайт на русском языке.

    Настройка редиректов для SEO

    Рекомендуем убедиться в необходимости настройки нужной вам переадресации. К примеру, некоторые CMS уже имеют настроенную по умолчанию переадресацию на странички со слэшем.

    Применяйте 2 важных для редиректов правила:

    1. Не используйте несколько последовательных редиректов – это увеличит нагрузку на сервер и снизит скорость работы ресурса.
    2. Последовательность переадресаций должна быть от частной до глобальной. Скажем, редирект со страницы 1 на страницу 2, а потом общий на странички со слэшем. Это работает не всегда, нужно тестировать.

    Настройка постраничных 301 редиректов

    Необходимо для следующих случаев:

    • смена структуры сайта с изменением уровня вложенности страницы;
    • страницы уже нет, но необходимо перенаправить её трафик;
    • смена URL.

    Удаление страницы не очень эффективно. Рекомендуем не доходить до ошибки 404, а сделать редирект на другой URL. Это уменьшит риск потери сайтом позиций в поисковой выдаче. Настройка 301 переадресации со страницы 1 на страницу 2 возможна с помощью директивы простого перенаправления:

    Redirect 301 /page1/  https://mysite.com/page2/
    • /page1/ – адрес страницы от корневой папки, без домена и протокола. Пример: /catalog/ofisnaya-mebel/kompjuternye-stoly/.
    • https://mysite.com/page2/ – полный адрес страницы редиректа, включая протокол и домен. Пример: https://dom-mebeli.com/ofisnaya-mebel/stoly-v-ofis/.

    Прочь дубли!

    Чтобы у каждой страницы ресурса был только один адрес, необходимо настроить:

    • перенаправление на странички, имеющие слэш на окончании URL либо наоборот;
    • основное зеркало – адрес сайта в поисковых системах.

    Реализация описанного возможна с помощью модуля mod_rewrite. В нем применяются спецкоманды – директивы сложного перенаправления. Первая команда – все активизация преобразования URL’а: RewriteEngine On.

    Редирект на слэш или в другую сторону

    Это решается отдельно для каждого случая. Если сайт накопил историю в поиске, проанализируйте количество проиндексированных страниц со слэшем и без. Если сайт новый, чаще всего делают слэш-переадресацию. Для проверки редиректа по умолчанию просто удаляют/добавляют слэш в окончании URL’а. Страница перегрузилась и имеет новый адрес – дубли есть, нужна коррекция. Смена URL’а – все ОК. Лучше проверить разную вложенность папок.Zeus [NC] <limit get=”” post=”” head=””> Order Allow,Deny Allow from all Deny from env=bad_bot </limit>

    Список «плохих» пользователей легко редактируется. На этом ресурсе можно ознакомиться с хорошими и плохими ботами.

    Если вас интересует запрет для роботов из поиска, используйте следующий код:

    RewriteEngine on
    RewriteCond %{USER_AGENT} Googlebot
    RewriteRule .* - [F]
    Для всех ботов, за исключением конкретных IP
    ErrorDocument 403 https://mysite.com
    Order deny,allow
    Deny from all
    Allow from IP1
    Allow from IP2 и т. д.
    Для указанных IP
    allow from all
    deny from IP1
    deny from IP2 и т. д.
    Подсеть
    allow from all
    deny from 192.168.0.0/24

    IP-адреса спамеров определяются логами сервера либо сервисами статистики. В админке WordPress видны IP-адреса тех, кто оставляет комментарии.

    К конкретному файлу
    <files myfile.html>
    order allow,deny
    deny from all
    </files>

    Пользователь увидит ошибку 403 – «доступ запрещен».

    Советуем сделать ограничение доступа к самому файлу .htaccess, а настроив все правила, поставьте на него права доступа 444.

    <Files .htaccess>
    order allow,deny
    deny from all
    </Files>

    Для ресурсов на WordPress стоит наложить ограничения доступа к wp-config.php, содержащему информацию о базе данных:

    <files wp-config.php>
    order allow,deny
    deny from all
    </files>
    Для пользователей, которые пришли с конкретного сайта

    Можно заблочить юзеров с нежелательного ресурса (порноконтент и др.).

    <IfModule mod_rewrite.c>
    RewriteEngine on
    RewriteCond %{HTTP_REFERER} bad-site.com [NC,OR]
    RewriteCond %{HTTP_REFERER} bad-site.com [NC,OR]
    RewriteRule .* - [F]
    </ifModule>

    Защита доступа к конкретной папке или файлу

    Сперва нужно создать файл .htpasswd, прописав логины и пароли user:password и разместив файл в корне вашего ресурса. Советуем применить шифрование для паролей с помощью специализированных сервисов – пример. Далее следует добавить папки либо файлы в .htaccess:

    Защита файла паролем:
    <files secure.php=””>
    AuthType Basic
    AuthName “”
    AuthUserFile /pub/home/.htpasswd
    Require valid-user
    </files>
    Защита папки паролем:
    resides
    AuthType basic
    AuthName “This directory is protected”
    AuthUserFile /pub/home/.htpasswd
    AuthGroupFile /dev/null
    Require valid-user

    Запрет на активацию «плохих» скриптов

    Следующие команды защищают сайт от так называемых «скриптовых инъекций» – инструмента хакеров:

    Options +FollowSymLinks
    RewriteEngine On
    RewriteCond %{QUERY_STRING} (\<|%3C).*script.*(\>|%3E) [NC,OR]
    RewriteCond %{QUERY_STRING} GLOBALS(=|\[|\%[0-9A-Z]{0,2}) [OR]
    RewriteCond %{QUERY_STRING} _REQUEST(=|\[|\%[0-9A-Z]{0,2})
    RewriteRule ^(.*)$ index.php [F,L]

    Результат – перенаправление на ошибку 403 «Доступ запрещен».

    Защита сайта от DDOS-атаки

    Хороший вариант – ограничение максимально допустимого размера запроса. По умолчанию такого ограничения нет. Нужно прописать в .htaccess величину загружаемых файлов в байтах:

    LimitRequestBody 10240000

    Здесь размер равен 10 Мбайтам. Если нужно запретить загружать файлы вообще, пропишите число менее 1 Мбайта (1048576 байт). Либо используйте директивы LimitRequestFields, LimitRequestFieldSize и LimitRequestLine из официального руководства.

    Настройка отображения сайта

    Замена индексного файла

    Индексным называют файл, который будет открываться по умолчанию, если пользователь обратился к определенной папке. Часто их называют index.htm, index.html, index.php, index.shtml, index.phtml, default.html, default.htm.

    Для замены такого файла размещаем в папке .htaccess и добавляем следующую команду:

    DirectoryIndex hello.(.*)/$ /$1.html [R=301,L]
    Убираем .html:
    RewriteBase /
    RewriteRule (.*)\.html$ $1 [R=301,L]

    Аналогично для php.

    Настройка кодировки

    Кодировка используется, чтобы избежать ошибок при отображении сайта браузером. Наиболее часто используемые:

    • UTF-8 – универсальная.
    • Windows-1251 – кириллица.
    • Windows-1250 – для Центральной Европы.
    • Windows-1252 – для Западной Европы.
    • KOI8-R – кириллица (КОИ8-Р).

    Первые две применяются чаще всего.

    Кодировку указывают либо в метатэге каждой странички, либо задают с помощью .htaccess.

    Для UTF-8:

    AddDefaultCharset UTF-8

    Для Windows-1251:

    CharsetSourceEnc WINDOWS-1251

    Примеры показывают разные кодировки, но для одного сайта кодировки в этих командах должны совпадать.

    Создание кастомных страниц ошибок

    Используя правила, в .htaccess легко настраивается отображение страниц, специально созданных для наиболее популярных ошибок. Примеры:

    ErrorDocument 401 /error/401.php
    ErrorDocument 403 /error/403.php
    ErrorDocument 404 /error/404.php
    ErrorDocument 500 /error/500.php

    Перед прописыванием директив следует создать в корне веб-сайта папку error и разместить в ней соответствующие файлы для каждой страницы ошибки. Это необходимо, чтобы пользователь не потерялся на странице 404, а получил возможность перейти в другой раздел ресурса.

    Оптимизация работы сайта

    Скорость загрузки вашего ресурса – важный фактор ранжирования в поисковиках. Директив в .htaccess помогут её увеличить.

    Сжатие компонентов сайта модулями mod_gzip либо mod_deflate

    Сжимая файлы, мы увеличиваем скорость загрузки ресурса, но и больше нагружаем сервер. Оба модуля сжимают практически одинаково.

    Gzip считается модулем с более гибким синтаксисом, также умеет использовать маски:

    <ifModule mod_gzip.c>
    mod_gzip_on Yes
    mod_gzip_dechunk Yes
    mod_gzip_item_include file \.Content-Encoding:.*gzip.*
    </ifModule>

    В mod_deflate нужно перечислить типы файлов для сжатия:

    <ifModule mod_deflate.c>
    AddOutputFilterByType DEFLATE text/html text/plain text/xml application/xml application/xhtml+xml text/css text/javascript application/javascript application/x-javascript
    </ifModule>

    Усиление кэширования

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

    FileETag MTime Size
    <ifmodule mod_expires.c>
    <filesmatch “.(jpg|gif|png|css|js)$”>
    ExpiresActive on
    ExpiresDefault “access plus 1 week”
    </filesmatch>
    </ifmodule>

    Можно задать срок жизни кэша – hours, month, year и др.

    Или так:

    <IfModule mod_expires.c>
    ExpiresActive On
    ExpiresByType application/javascript "access plus 7 days"
    ExpiresByType text/javascript "access plus 7 days"
    ExpiresByType text/css "access plus 7 days"
    ExpiresByType image/gif "access plus 7 days"
    ExpiresByType image/jpeg "access plus 7 days"
    ExpiresByType image/png "access plus 7 days"
    </IfModule>

    Другие возможности

    Настройки php

    Выполняются программистами в случае отсутствия доступа к php.12\.345\.678\.90 RewriteRule $ https://mysite.ru/info.html [R=302,L]

    Общие принципы работы с .htaccess

    • Перед тем, как внести изменения, сохраняйте копию файла для возможного «отката».
    • Делайте изменения поэтапно, добавляя по одному правилу. Далее оцените результат и переходите к следующему этапу.
    • Размещая несколько файлов .htaccess в разных папках, следует прописать в дочерних только новые команды, актуальные для конкретной папки. Остальные будут унаследованы от родительской папки либо файла в корневом каталоге.
    • Чистите кэш браузера.
    • При возникновении ошибки 500 следует проверить синтаксис правила на опечатку. Можно использовать сервисы проверки .htaccess в сети, скажем, этот. Нет ошибок – скорее всего, такая команда запрещена в главном файле конфигурации. Нужна консультация программиста и хостинг-провайдера.
    • В командах .htaccess символы кириллицы недопустимы. При указании адреса домена на кириллице (вашсайт.рф) используйте любой whois-сервис, чтобы определить название по методу punycode.(.*) http://site.com/$1 [R=301,L]

      ! Все правила выполняются в прямом порядке их следования в файле .htaccess и правило, написанное позже, и будет выполняться позже.

      ! Для сайтов, на которых используется не сервер Apache, аналогичные 301 редиректы легко настраиваются с помощью PHP:

      ! Оптимально настраивать все редиректы сразу на конечную страницу (без промежуточных перенаправлений, в один шаг) это улучшает их восприятие со стороны поисковых систем и пользователей.

      RewriteCond %{HTTP_USER_AGENT} (iPad|ipad|iphone|iPhone|ipod|iPod|android|midp|j2me|symbian|series\ 60|symbos|windows\ mobile|windows\ ce|ppc|smartphone|blackberry|mtk|bada|windows\ phone) [NC]

      RewriteRule (.*) http://mobile.site.ru/ [L,R=301]

      RewriteCond %{HTTP_USER_AGENT} !(accoona|ia_archiver|antabot|ask\ jeeves|baidu|dcpbot |eltaindexer|feedfetcher|gamespy|gigabot|googlebot |gsa-crawler|grub-client|gulper|slurp|mihalism|msnbot|worldindexer |ooyyo|pagebull|scooter|w3c_validator|jigsaw|webalta|yahoofeedseeker |yahoo!\ slurp|mmcrawler|yandexbot|yandeximages |yandexvideo|yandexmedia|yandexblogs|yandexaddurl|yandexfavicons |yandexdirect|yandexmetrika|yandexcatalog|yandexnews |yandeximageresizer) [NC]

      RewriteRule (. — спецсимвол начала строки;
      $ — спецсимвол конца строки;
      ! — спецсимвол отрицания;
      . — точка, заменяет любой символ, но только один;
      () — группировка;
      \ — «экранирующий» слеш, следующий символ после него считается обычным, а не спецсимволом.

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

      ? — символ повторяется 0 или 1 раз.
      + — повторяется от 1 до 65536 раз.
      * — повторяется от 0 до 65536 раз.

      Флаги, задают доп. опции для используемого правила. Перечисляются в квадратных скобках через запятую, скажем [NC] или [R=301,L].

      NC — флаг NoCase, отключающий проверку регистра символов при срабатывании правила.
      R — флаг Redirect, производит процесс остановки изменения URL-адреса и возвращает результат. Чаще всего используется значение R=301, но возможны и другие для временных перенаправлений (302, MOVED TEMPORARY).
      L — флаг Last, останавливает формирования URL-адреса и строка считается окончательной.443$ RewriteCond %{REQUEST_URI} =/testpage.php RewriteRule .* https://%{SERVER_NAME}%{REQUEST_URI) [R,L]

      RewriteCond %{HTTPS} =off
      RewriteCond %{REQUEST_URI} =/testpage.php
      RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI> [QSA,L]
      

      *Примечание:

      Настройку редиректа с http на https необходимо проводить после установки SSL-сертификата на сайт. Сначала спросите в поддержке хостинга, какой способ настройки переадресации актуальный в вашем случае. Если вы собираетесь настроить редирект с https на http вручную, используйте файл .htaccess. Вносите по очереди разные команды, проверяя каждую из них вводом адреса с http.

      Если сайт работает на Битрикс, исправьте абсолютные ссылки на относительные, затем обновите файлы sitemap.xls и robots.txt и внесите исправленную информацию в Яндекс.Вебмастер и Google Search Console. Настройте интеграцию с через протокол http, чтобы не пришлось переписывать всю программу.(.*)$ http://www.newsite.ru/new/ [L,R=301]

      Рейтинг автора

      Автор статьи

      SEO-аналитик, программист (PHP, Ajax, Delphi, MySQL).

      Написано статей

      Загрузка…

      .htaccess перенаправление на https и www

      Если ваш сайт обслуживает защищенные страницы по протоколу HTTPS (т.е. через SSL / TLS ), вам может потребоваться метод перенаправления всех HTTP-запросов на HTTPS. Затем, чтобы продолжить свои усилия по канонизации, вы также можете перенаправить все запросы www на не-www (или наоборот). Оба эти метода необходимы для обслуживания канонических версий ваших веб-страниц, так почему бы не объединить их в один простой фрагмент.www \ .example \ .com [NC] RewriteRule (. *) Https://example.com/$1 [L, R = 301]

      Как и раньше, поместите этот код в корневой каталог .htaccess вашего сайта. Вот что он делает:

      1. Проверяет, доступен ли mod_rewrite
      2. Проверяет, отключен ли HTTPS, или если запрос включает www
      3. Если любое из условий соответствует, запрос соответствует и перенаправляется на https / non-www адрес

      При размещении в корне.htaccess, этот метод охватывает всех запросов, обеспечивая полную канонизацию https / без www для вашего сайта. Не забудьте заменить два экземпляра example.com своим собственным доменным именем.

      Примечание: , если ваш сайт страдает от дублирования страниц из-за index.php , добавленного к запрошенным URL-адресам, ознакомьтесь с этим сообщением на WP-Mix.com, в котором объясняется, как удалить www и index.php из URL-адреса.

      Перенаправление на https и www

      Следующее.www \. [NC] RewriteRule (. *) Https: //www.% {HTTP_HOST}% {REQUEST_URI} [L, R = 301]

      Этот код выполняет следующие действия:

      1. Первые две строки условно перенаправляют на https. Если для переменной HTTPS установлено значение off, запрос перенаправляется на https (см. Примечания ниже, если используется прокси).
      2. Вторые две строки перенаправляют на www. Если запрос / хост не начинается с www. , запрос перенаправляется на www.

      При размещении в корне.htaccess, этот метод охватывает всех запросов, обеспечивая полную канонизацию https / www для вашего сайта. Этот код не требует редактирования; это полностью plug-n-play.

      Примечания при использовании прокси

      Как объяснено здесь:

      «Когда за некоторыми формами проксирования, когда клиент подключается через HTTPS к прокси, балансировщику нагрузки, приложению Passenger и т. Д., Переменная % {HTTPS} никогда не может быть на и вызвать цикл перезаписи. Это потому что ваше приложение фактически получает простой HTTP-трафик, даже если клиент и прокси / балансировщик нагрузки используют HTTPS.В этих случаях проверьте заголовок X-Forwarded-Proto вместо переменной % {HTTPS} . «

      Итак, если вы используете какой-либо прокси-сервис или аналогичный, добавьте следующую строку в приведенный выше код:

        RewriteCond% {HTTP: X-Forwarded-Proto}! Https  

      Итак, окончательный результат при использовании прокси-сервера выглядит так:

        # Canonical https / www (при использовании прокси)
      
      RewriteCond% {HTTP: X-Forwarded-Proto}! Https
      Скидка RewriteCond% {HTTPS}
      RewriteRule (.www \. [NC]
      RewriteRule (. *) Https: //www.% {HTTP_HOST}% {REQUEST_URI} [L, R = 301]
        

      Как перенаправить перезапись с помощью файла htaccess — с www на не-www

      Сводка

      По умолчанию ваш сайт доступен как с www.example.com, так и с example.com. С Google наказывает это из-за причин дублирования контента, вам следует ограничить доступ к www.example.com или example.com. Некоторые ссылки могут выходить за рамки вашего веб-сайта и / или поисковые системы уже проиндексировали ваш веб-сайт по обоим адресам.

      Ваш основной файл .htaccess находится в папке public_html. Чтобы узнать, как получить доступ к этому файлу, обратитесь к нашему руководству по .htaccess.

      Перенаправление на или с WWW

      Часть 1 — Как перенаправить все ссылки на www.www.example.com $ [NC]
      указывает, что следующее правило срабатывает только тогда, когда хост http (то есть домен запрашиваемый URL) не (- указан с «!») www.example.com.

      $ означает, что хост заканчивается на www.example.com — и в результате все страницы from www.example.com вызовет следующее правило перезаписи. Комбинированный с инверсивным «!» результат каждого хоста, который не www.(. *) $ содержит запрошенный URL без домена.

      Следующая часть http://www.example.com/$1 описывает цель правила перезаписи. Это наш «последний» использованный доменное имя, где $ 1 содержит содержимое (. *).

      Следующая часть также важна, так как она 301 перенаправить для нас автоматически: [L, R = 301]. L означает, что это последнее правило в этом забеге.После этой перезаписи веб-сервер вернет результат. R = 301 означает, что веб-сервер возвращает 301 перемещенный постоянно в запрашивающий браузер или поисковую систему.

      Перенаправить на example.com/index.php

      У вас есть веб-сайт с названием example.com, и вы хотите перенаправить все входящие URL-адреса на example.com/ на пример.$ http://example.com/index.php [L, R = 301] Объяснение этого перенаправления .htaccess 301:

      Что делает этот код выше? Давайте посмотрим на Пример 1 — Перенаправьте example.com на www.example.com. Первая строка запускает перезапись модуль. Следующая строка:

        RewriteCond% {HTTP_HOST}! Www.example.com $  
      указывает, что следующее правило срабатывает только тогда, когда хост http (что означает домен запрашиваемого URL-адреса) не указан (- указан со знаком «!») www.example.com.

      $ означает, что хост заканчивается на www.example.com — и в результате все страницы с example.com вызовут следующее правило перезаписи. В сочетании с инверсивным «!» это результат каждый хост, кроме www.(. *) $ содержит запрошенный URL без домена.

      Следующая часть http://www.example.com/$1 [L, R = 301] описывает цель правило перезаписи — это «окончательное» используемое доменное имя, где $ 1 содержит содержимое принадлежащий (.*).

      Следующая часть также важна, так как она 301 перенаправить для нас автоматически: [L, R = 301]. L означает, что это последний правило в этом пробеге.После этой перезаписи веб-сервер вернет результат. R = 301 означает, что веб-сервер возвращает 301 перемещенный постоянно в запрашивающий браузер или поисковую систему.

      Перенаправить посетителей на новый сайт

      У вас есть старый веб-сайт, доступный по адресу oldexample.com, и вы есть новый веб-сайт, доступный по адресу newexample.com. Копирование содержание старого веб-сайта на новом веб-сайте — это первый шаг — но что будет после этого? Вы должны сделать 301 переезд навсегда перенаправить со старого домена на новый — это легко и имеет некоторые преимущества:

      • Пользователи будут автоматически перенаправлены на новый домен — вам не нужно их сообщать.
      • Поисковые системы будут перенаправлены на новый домен, и вся соответствующая информация будет быть перемещенным в новый домен (но это может занять некоторое время).
      • Google PageRank ™ будет перенесен в новый домен, а также другая внутренняя информация который используется для установки позиции страниц на страницах результатов поисковой системы (serp) — например, TrustRank.

      Создайте перенаправление 301 для всех HTTP-запросов, которые идут в старый домен.(. *) $ http://www.newexample.com/$1 [L, R = 301] Это полезно, если вы используете www.newexample.com в качестве нового доменного имени. (см. также эту статью о перенаправлении доменов с www и без www). Если нет — используйте код примера 2.

    • Пример 2 — Перенаправление с oldexample.com на newexample.com:
        RewriteEngine On
                  RewriteBase /
                  RewriteCond% {HTTP_HOST}! Oldexample.(. *) $ http://newexample.com/$1 [L, R = 301]  
    • Как добавить косую черту в конце

      Некоторые поисковые системы удаляют косую черту в конце URL-адресов, которые выглядят как каталоги — например, Yahoo делает это. Однако это может привести к проблемы с дублированным контентом, когда доступно одно и то же содержание страницы под разными URL.Apache дает дополнительную информацию в Apache FAQ по серверу.

      Давайте посмотрим на пример: example.com/google/ индексируется в Yahoo as example.com/google — в результате появятся два URL-адреса с такое же содержание.

      Решение состоит в том, чтобы создать правило перезаписи .htaccess, которое добавляет завершающие косые черты к этим URL-адресам.(. *) $ http://example.com/$1/ [L, R = 301] Объяснение правила перезаписи добавления завершающей косой черты .htaccess:

      Первая строка сообщает Apache, что это код для механизма перезаписи. модуля mod_rewrite Apache. Вторая строка устанавливает текущий каталог в качестве корня страницы. Но самое интересное:

        RewriteCond% {REQUEST_FILENAME}! -F  
      гарантирует, что существующие файлы не будут добавлены косой чертой.Вы не должны делать то же самое с каталогами, так как это исключит поведение перезаписи для существующих каталогов. Линия
        RewriteCond% {REQUEST_URI}! Example.php  
      исключает образец URL, который не следует переписывать. Это всего лишь пример. Если у вас нет файла или URL-адреса, который нельзя переписывать, удалите эту строку. Состояние:
        RewriteCond% {REQUEST_URI}! (.(. *) $ http://example.com/$1/ [L, R = 301]  
      выполняет перенаправление 301 на URL-адрес с добавленной косой чертой. Вам следует заменить example.com с вашим доменом.

      Рекомендуемое содержимое справки

      Как перенаправить веб-сайт — как настроить перенаправление 301 или 302

      Как создать редирект?

      Защита от хотлинков с помощью mod_rewrite

      Предотвращение кражи полосы пропускания с помощью механизма перезаписи модов и.htaccess

      Как редактировать файл .htaccess — редактировать файл htaccess в файловом менеджере cPanel

      Объясняет, как редактировать .htaccess

      Соответствующее содержимое справки

      Перенаправления, которые не работают из-за переменных PHP

      Перенаправление www.yourdomain.com/default.html или index.html на http://www.yourdomain.com/index.php?act=whatever перенаправляет его на http://www.yourdomain.com/index.php%3fact=whatever In другими словами,

      Как кодировать перенаправление PHP — перенаправление заголовка PHP

      Как перенаправить пользователей на другую страницу с помощью PHP?

      Учебное пособие по htaccess

      Что такое.htaccess и где я могу найти дополнительную информацию?

      Как принудительно установить SSL на всех страницах в файле .htaccess

      Как принудительно использовать https на всем веб-сайте.

      Измените URL-адреса WordPress с помощью инструментов WordPress

      В этой статье объясняется, как изменить настройки URL-адреса сайта или URL-адреса домашней страницы в WordPress.Это может быть полезно, если вы переместили свой сайт WordPress или планируете переместить свой сайт WordPress.

      Перенаправление веб-страницы

      Redirects позволяет вам сделать перенаправление определенной веб-страницы на другую страницу и отображать содержимое этой страницы. Узнайте, как настроить постоянную (301 или временную (302) переадресацию).

      Как исправить ExecCGI в.htaccess

      Как запускать сценарии CGI для дополнительных доменов.

      Как разместить основной домен из подпапки htaccess

      Как заставить подкаталог (или подпапку) действовать как public_html для вашего основного домена?

      Введение в.Перенаправления htaccess — Дэниел Морелл

      Знайте свои перенаправления!

      Это одна из важных глав этого руководства. Если вы больше ничего не читаете, поймите и усвойте содержание этой главы.

      Ваша должность не имеет значения. Вы можете быть оптимизатором поисковых систем, разработчиком, системным администратором или консультантом. Вам нужно понимать редиректы.

      Почему?

      Перенаправления

      влияют на нагрузку на сервер, скорость сайта, индексируемость, возможность сканирования, UX и почти все остальное, что может нарушить работу веб-сайта.

      Что мы рассмотрим


      1. Первое сопоставление URL-адресов
      2. mod_alias против mod_rewrite
      3. mod_alias основы
      4. mod_rewrite основы
      5. Перенаправить регулярные выражения и переменные

      Первое сопоставление URL-адресов


      Прежде чем мы сможем говорить о том, как создавать перенаправления, нам нужно поговорить о сопоставлении URL-адресов.

      Это руководство по использованию файла .htaccess для SEO, поэтому мы будем говорить о том, как работает веб-сервер Apache.

      Что такое сопоставление URL-адресов?

      Отображение URL-адресов — это процесс сопоставления унифицированного указателя ресурса (URL) с ресурсом (файлом) в файловой системе сервера.

      Раньше, когда веб-сайты создавались со статическими HTML-страницами, это было просто. Сегодня сопоставление URL-адресов намного сложнее.

      Основы сопоставления URL-адресов

      Когда ваш браузер запрашивает URL-адрес, ваш запрос сначала проходит на DNS-серверы. После завершения поиска DNS запрос передается на веб-сервер.

      Затем веб-серверу необходимо определить, какой ответ должен быть предоставлен на этот запрос.Есть несколько входов (например, HTTP-заголовки и файлы cookie), но для простоты мы просто посмотрим на URL-адрес.

      Самый простой способ сопоставления URL-адресов сервером Apache — сопоставление пути и файла с каталогом и файлом в DocumentRoot.

      Пример: сопоставление URL-адресов Apache

      Ваш веб-сайт использует домен example.com .

      DocumentRoot для example.com на вашем сервере настроен на путь / var / www / html .

      Запрос http://example.com/somepath/file.html будет соответствовать /var/www/html/somepath/file.html в файловой системе сервера.

      Пока все довольно просто.

      Все усложняется, когда ресурсы хранятся вне DocumentRoot или когда вы не хотите, чтобы прямой URL-адрес соответствовал ресурсу.

      Например, что произойдет, если вы хотите, чтобы http://example.com/somepath/file.html выглядел как http: // example.com / somepath / file , т.е. минус .html ?

      Как CMS, такие как WordPress и Joomla, обслуживают URL-адреса, которые ничего не соответствуют в файловой системе сервера?

      Ответ на эти вопросы можно найти в двух серверных модулях Apache mod_alias и mod_rewrite.

      mod_alias против mod_rewrite


      Apache использует два модуля для сопоставления URL-адресов с ресурсами, которые не являются прямыми совпадениями файловой системы с запрошенным URL-адресом. Эти модули — это модули mod_alias и mod_rewrite.

      У каждого есть свои преимущества и применение.

      Хорошо, может быть, я немного резок по поводу mod_alias.

      mod_alias хорош для базовых перенаправлений и сопоставления URL-адресов с псевдонимами. Однако mod_rewrite содержит все навороты, которые вам могут понадобиться.

      mod_alias основы


      Что можно делать с mod_alias?

      Хотя mod_rewrite превосходит почти во всех отношениях, у mod_alias есть несколько вещей, с которыми он действительно хорошо справляется. Первый — это простые перенаправления.

      Если вы хотите перенаправить один URL-адрес на другой, лучшим вариантом будет mod_alias.

      Давайте посмотрим на некоторые директивы, принадлежащие mod_alias.

      Директива перенаправления

        ### Синтаксис директивы перенаправления
      # Перенаправление [статус] [URL-путь] URL
      
      ### Пример
      Перенаправить 301 "/old-url.html" "/new-url.html"  

      Синтаксис директивы перенаправления следующий …

      • Перенаправление — это директива.
      • [статус] идентифицирует код статуса HTTP, который будет обслуживаться.
      • [URL-путь] — это путь URL-адреса для перенаправления.
      • URL-адрес — это новый обслуживаемый URL-адрес.

      Каждый из этих элементов после директивы Redirect называется аргументом. Давайте подробнее рассмотрим каждый из этих аргументов.

      1. Статус
      аргумент

      Об аргументе status следует помнить о некоторых вещах.

      Аргумент статуса является необязательным.

      При желании можно указать статус . Вы также можете не включать его. Однако следует отметить, что статус по умолчанию для директивы Redirect 302 . Это означает, что если не указать статус HTTP, Apache будет обслуживать статус 302 .

      Вы также можете указать статус, используя ключевое слово status аргумент вместо числового status аргумента.

      Можно использовать четыре аргумента ключевого слова status .

      • постоянный такой же, как 301
      • темп совпадает с 302
      • см. Другой такой же, как 303
      • пропало совпадает с 410

      Аргумент статуса принимает не только эти четыре параметра. Однако, в зависимости от того, какой статус вы объявляете, аргументы URL-путь и URL могут потребоваться, а могут и не потребоваться.См. Раздел об этих аргументах для получения дополнительной информации.

      Я всегда указываю статус, даже если это 302 . Он более понятен и удобен в обслуживании для будущих оптимизаторов поисковых систем и разработчиков.

      Например, эти четыре оператора перенаправления будут иметь одинаковый эффект.

        ### Эти перенаправления одинаковы
      Перенаправить "/ старый-путь" "/ новый-путь"
      Перенаправить 302 "/ старый-путь" "/ новый-путь"
      Перенаправить временный "/ старый-путь" "/ новый-путь"
      RedirectTemp "/ старый-путь" "/ новый-путь"  

      Я объясню директиву RedirectTemp позже в этой главе.

      2.
      URL-путь аргумент

      Путь URL-адреса не может быть относительным URL-адресом.

      Это означает, что вы должны включить косую черту в начале URL-адреса.

      URL-путь не может включать схему и имя хоста.

      Правильно Неправильно
        Перенаправление "/old-url.html" "/new-url.html"  
        Перенаправить "старый URL.html "" /new-url.html "
      Перенаправить "http: //www.example/old-url.html" "/new-url.html"  
      3.
      URL аргумент

      Аргумент URL , как и аргумент URL-путь , должен начинаться с косой черты.

      Правильно Неправильно
        Перенаправление 302 "/ старый-путь" "/ новый-путь"  
        Перенаправление 302 «старый путь» «/ новый путь»  

      Аргумент URL может включать схему и хост.

        Перенаправление "/old-url.html" "http: //www.example/new-url.html"  

      Если аргумент status находится между 300 и 399, также должен присутствовать аргумент URL .

      Если аргумент status НЕ находится между 300 и 399, аргумент URL также НЕ должен присутствовать.

      Правильно Неправильно
        Перенаправление 301 "/ старый-путь" "/ новый-путь"
      Перенаправить 302 "/ старый-путь" "/ новый-путь"
      Перенаправить 403 "/ старый путь"  
        Перенаправление 301 "/ старый путь"
      Перенаправить "/ старый путь"
      Перенаправить 403 "/ старый-путь" "/ новый-путь"  

      Причина Redirect "/ old-path" неверна, потому что статус по умолчанию — 302 .Следовательно, ему нужен аргумент URL .

      Директива RedirectMatch

        ### Синтаксис директивы RedirectMatch
      # RedirectMatch [статус] URL регулярного выражения
      
      ### Пример
      RedirectMatch 301 "(. *) \. Pdf $" "$ 1.html"  

      Синтаксис директивы RedirectMatch следующий …

      • RedirectMatch — это директива.
      • [статус] идентифицирует код статуса HTTP, который будет обслуживаться.
      • regex — это URL-путь , сопоставленный с использованием регулярного выражения (Regex).
      • URL-адрес — это новый обслуживаемый URL-адрес.

      В приведенном выше примере создается перенаправление 301 для всех документов PDF в документ HTML с тем же путем и именем файла на хосте.

      Следует отметить, что RedirectMatch и Redirect одинаковы, за исключением двух вещей.

      Во-первых, как уже говорилось, RedirectMatch использует регулярное выражение для соответствия аргументу URL-путь .

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

      Обратная ссылка: от $ 0 до $ 9 , и она указывает на то, что записано в группе, заключенное в круглые скобки.

      Давайте еще раз посмотрим на пример.

        RedirectMatch 301 "(. *) \. Pdf $" "$ 1.html"  

      (. *) — первая группа захвата. Это означает, что на него можно ссылаться с помощью обратной ссылки $ 1 .

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

        RedirectMatch 301 "/media.php?id=(.*)&file=(.*)$" "https://cdn.example.com/images/$1/$2"  

      Это перенаправит /media.php?id=168&file=file-icon.png на https://cdn.example.com/images/168/file-icon.png .

      RedirectPermanent и RedirectTemp

      Я хочу обратиться к двум дополнительным директивам в mod_alias. Это RedirectPermanent и RedirectTemp .

      RedirectPermanent является точным эквивалентом Permanent Permanent .

      RedirectTemp является точным эквивалентом Redirect temp .

      Я лично не использую ни метод перенаправления ключевого слова, ни RedirectPermanent , ни RedirectTemp . Я предпочитаю просто включать числовой код статуса. Он выглядит чище и интуитивно понятнее.

      mod_alias содержит и другие важные директивы. Однако их нельзя установить в контексте файла .htaccess.

      основы mod_rewrite


      Нам удалось многое сделать с помощью Redirect и RedirectMatch в mod_alias.Однако, как только вы увидите, что мы можем делать с mod_rewrite, вы начнете смотреть на mod_alias как на Yugo.

      mod_rewrite — это больше, чем модуль для создания редиректов. Это мощный и способный модуль управления URL-адресами. Это означает, что у него есть возможность изменять способ отображения URL-адресов на веб-сервере Apache.

      mod_alias может многое сделать с его директивами Alias ​​ и AliasMatch , но они не могут быть установлены в контексте .htaccess.

      Это означает, что есть множество вещей, которые мы можем сделать с помощью mod_rewrite, чего нельзя сделать с помощью mod_alias.

      Как работает mod_rewrite

      Хотя большинству специалистов по SEO, возможно, не нужно знать все детали того, как mod_rewrite работает внутри, это бесценно для устранения ошибок. Также разумно понять основы того, как это работает.

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

      Примечание: единственными двумя возможными исходами являются окончательное обслуживание ресурса, перенаправление или проксирование внешнего ресурса.Это, конечно, предполагает, что ошибок не было. Конечным результатом может быть ошибка 404. На самом деле, это часто бывает.

      Интересный факт:

      файлов .htaccess выполняются сверху вниз. Однако это исключение из этого общего правила. Вы могли заметить это, если внимательно посмотрели на диаграмму выше.

      Перед тем, как mod_rewrite проверит соответствие RewriteCond , URL-адрес сопоставляется с аргументом RewriteRule Pattern .(. *) долл. США

      Вы можете поделиться этой маленькой жемчужиной на следующей вечеринке в офисе SEO … добро пожаловать!

      Этот интересный факт имеет значение. Поскольку RewriteRule оценивается до любых условий перезаписи, вы можете использовать обратную ссылку из RewriteRule в RewriteCond .

      Основы и синтаксис

      Поскольку mod_rewrite настолько сложен и эффективен, нам нужно для начала объяснить несколько вещей.

      Синтаксис, используемый модулем перезаписи, хотя и более сложен, чем модуль псевдонима, но прост.

      Есть пять директив, о которых вам нужно знать. Они …

      • RewriteEngine
      • RewriteBase
      • Опции перезаписи
      • RewriteCond
      • RewriteRule

      Есть дополнительная директива RewriteMap . Это один из моих любимых.Однако его нельзя использовать в контексте файла .htaccess.

      Из всех этих директив мы потратим большую часть времени на изучение RewriteCond и RewriteRule . Это потому, что они делают большую часть тяжелой работы и являются наиболее настраиваемыми.

      RewriteEngine директива

      Первым шагом к использованию mod_rewrite является включение механизма перезаписи среды выполнения с помощью директивы RewriteEngine . Это очень просто.

        ### Синтаксис
      # RewriteEngine вкл. / Выкл.
      
      # Включите RewriteEngine
      RewriteEngine на
      
      # Отключить RewriteEngine
      RewriteEngine выключен  
      Подсказка:

      Не забывайте, что вы также можете выключить RewriteEngine , установив для аргумента on / off значение off . Это может быть удобно, если у вас есть большой блок правил перезаписи, который вы хотите отключить. Это намного быстрее, чем закомментировать каждую строку с помощью # .

      RewriteBase директива

      Обычно рекомендуется объявлять RewriteBase в вашем.htaccess файлы. Директива RewriteBase определяет префикс URL-адреса, который будет использоваться для относительных URL-адресов.

      Это важно, поскольку mod_rewrite, в отличие от mod_alias, может принимать относительные URL-адреса (URL-адреса, которые не начинаются с косой черты).

        ### Синтаксис
      # RewriteBase URL-путь
      
      ### Пример
      RewriteBase /  

      Вышеупомянутый RedirectBase устанавливает путь для относительных URL-адресов к DocumentRoot . В последних версиях Apache в этом почти всегда нет необходимости.Однако я все еще это делаю.

      RewriteOptions Директива

      Честно говоря, если вам нужна эта директива, вы должны получить сервер, который дает вам root-доступ. Это немного выходит за рамки обычного файла .htaccess.

      Позволяет изменять конфигурацию модуля mod_rewrite.

        ### Синтаксис
      # Параметры RewriteOptions
      
      ### Пример
      RewriteOptions InheritDownBefore  

      Аргумент Options может принимать одну из нескольких предопределенных опций.Например, в приведенном выше примере используется InheritDownBefore . Это приведет к тому, что текущие правила перезаписи будут применены к дочерним конфигурациям перед дочерними правилами перезаписи.

      RewriteOptions может быть полезен при создании поддерживаемых и менее подробных конфигураций. Однако маловероятно, что вам понадобится использовать эту директиву.

      RewriteCond Директива

      Директива RewriteCond определяет условие, при котором будет выполняться следующее за ней RewriteRule .example \ .com [NC]

      Синтаксис RewriteCond выглядит следующим образом …

      • RewriteCond — это директива.
      • TestString идентифицирует строку, которая будет проверена.
      • CondPattern — это шаблон, с которым будет сопоставляться TestString .
      • [флаги] — это параметры, которые определяют, как должен обрабатываться RewriteCond .

      В приведенном выше примере имя хоста HTTP используется как TestString . для определения начала шаблона www.example.com не будет соответствовать, так как он начинается с www. , а не example.com .

      В нашем примере также используется флаг [NC] (без регистра). Это означает, что он будет соответствовать как example.com , так и Example.com .

      RewriteRule Директива

      RewriteRule является основополагающим элементом mod_rewrite. Это то, что используется для управления URL-адресами и создания перенаправлений.(. *) $ http://www.example.com/$1 [L, R = 301]

      Синтаксис RewriteRule выглядит следующим образом …

      • RewriteRule — это директива.
      • Шаблон — это Perl-совместимое регулярное выражение (PCRE), используемое для сопоставления с URL-путем. В контексте файла .htaccess шаблон сопоставляется с частичным путем в зависимости от того, где находится файл .htaccess.
      • Подстановка — это строка, которая заменяет URL-путь, с которым был сопоставлен шаблон .
      • [флаги] — это параметры, которые определяют, как RewriteRule следует обрабатывать. (.*) долларов за захват всего URL-пути без возможной начальной косой черты. Затем захваченный URL-путь добавляется к строке http://www.example.com/ с использованием обратной ссылки $ 1 .

        Последняя часть нашего RewriteRule — это два флага. L — последний флаг. Это говорит mod_rewrite выполнить это RewriteRule и вернуть результаты клиенту, не переходя к следующему RewriteRule . R — флаг перенаправления.Это указывает серверу перенаправить старый URL-адрес на новый URL-адрес, а не просто обслуживать новый ресурс URL-адреса по старому URL-адресу. Параметр = 301 флага R определяет тип используемого перенаправления.

        Конечным результатом нашего примера является то, что все запросы к example.com будут перенаправлены на канонический хост www.example.com . Это не лучший способ добиться этого. Однако он служит хорошим примером того, как работают RewriteCond и RewriteRule .

        Флаги перезаписи

        Последний аргумент для RewriteCond и RewriteRule [flags] . Флаг заключен в скобки, например. [R] . Вы можете включить более одного флага, разделив их запятой, например [R, L] .

        Есть несколько общих флагов, которые вы будете использовать.

        [E] или [env]

        Вы можете использовать флаг [E] для установки переменной среды.Синтаксис следующий …

          ### Синтаксис
        # [E = VAR: VAL]
        # [E =! VAR]
        
        ### Пример
        RewriteRule (. *) \. (Pdf) $ - [E = doc: $ 1]  

        В этом примере создается переменная среды с именем doc , если запрашивается PDF-файл. Если запрашивается white-paper.pdf , переменная doc будет содержать значение white-paper .

        Вы можете отключить переменную doc с помощью флага [E =! Doc] .

        [КОНЕЦ]

        Флаг [END] завершает текущий цикл обработки перезаписи, а также любую последующую обработку в.htaccess файл.

        [F] Запрещено

        Флаг [F] заставит сервер вернуть запрещенный код ответа 403. Это можно использовать для ограничения доступа к конфиденциальным файлам.

        Следует отметить, что при использовании флага [F] подразумевается [L] .

        [L] Последняя

        Последний [L] используется для остановки обработки и возврата текущих результатов набора правил.

        [N] Далее

        Флаг [N] заставит снова выполнить RewriteRule до тех пор, пока образец не перестанет возвращать совпадение.

          RewriteRule "(. *) A (. *)" "$ 1a $ 2" [N]  

        В этом примере выполняется изменение прогона каждый раз, когда он находит A , и заменяет его на и .

        Вы также можете указать максимальное количество раз, когда флаг [N] может зацикливаться, как это [N = 8] . Следующий процесс будет выполнен только 8 раз.

        [NC] Нет дела

        Флаг [NC] обрабатывает правило или условие без учета регистра. Это важно каждый раз, когда вы обрабатываете % {HTTP_HOST} .www \. не будет соответствовать TestString % {HTTP_HOST} , если Www. — это то, как начинается запрошенный хост.

        [QSA] QS Приложение

        Флаг [QSA] приведет к тому, что строка запроса из запроса будет добавлена ​​в конец новой строки запроса в подстановке . Это необходимо только в том случае, если ваша строка Substitution содержит строку запроса.

        Если вы не включите флаг [QSA] , а ваша строка Substitution содержит строку запроса, строка запроса из запроса будет отброшена.

        [QSD] QS Исключить

        Флаг [QSD] используется для удаления строки запроса запроса из целевого URI, если он не содержит строку запроса.

        [R] Перенаправление

        Флаг [R] вызовет обработку правила перезаписи как перенаправления. Если он не указан, URL-адрес будет сопоставлен с новым местоположением без перенаправления.

        Вы можете указать код ответа, используя синтаксис [R = NUM] .Код состояния может быть любым допустимым кодом состояния. Например, вы можете использовать [R = 404] . Если код состояния не является кодом состояния 3XX , строка Substitution будет отброшена, и будет подразумеваться флаг [L] .

        [S] Пропустить

        Флаг [S] может использоваться для пропуска указанного числа RewriteRule . [S = 3] пропустит следующие три RewriteRule .

        Перенаправить регулярные выражения и переменные


        Одним из наиболее мощных аспектов модуля перезаписи является возможность использовать Perl-совместимые регулярные выражения (PCRE) и переменные среды.

        Понимание значения символов и переменных регулярных выражений важно при написании наборов правил.

        Общие символы регулярных выражений

        Персонаж Значение Пример
        . Любой одиночный символ. .ish будет соответствовать рыба , блюдо , желание и т. Д., Но не мыть
        + Повторяет предыдущую конструкцию один или несколько раз. o + будет соответствовать o , ooo , ooo и т. Д., Но не book
        * Повторяет предыдущую конструкцию ноль или более раз. o * будет соответствовать пустой строке, o , ooo , ooo и т. Д., Но не book
        ? Делает предыдущую конструкцию необязательной.o будет соответствовать любой строке, которая начинается с o .
        $ Этот якорь определяет конец строки. o соответствует любой строке, которая заканчивается на o .
        () Соответствует группе символов. Он также создает группу захвата для обратных ссылок. . * (Oo). * соответствует book , берет , oops или любую другую строку, содержащую oo .c] og будет соответствовать dog , log , fog , но не cog .

        Общие переменные

        Переменные сервера заключены в % {} . Например, переменная HTTP_HOST записывается как % {HTTP_HOST} .

        Переменная Значение
        HTTP_HOST Имя хоста HTTP e.грамм. www.example.com .
        HTTP_REFERER HTTP-референт из заголовка HTTP-запроса, например. https://otherwebsite.com/somepage
        HTTPS Значение на , если соединение использует SSL / TLS, в противном случае — на .
        REQUEST_URI Путь к запрошенному URL-адресу.т.е. все, что находится после домена и до строки или фрагмента запроса.
        СХЕМА ЗАПРОСА Схема запроса. Обычно это http или https .
        ИМЯ_ФАЙЛА ЗАПРОСА То же, что и REQUEST_URI в контексте виртуального хоста, в противном случае путь в локальной файловой системе ресурса, соответствующего запросу. Большинство общих и возможных хостингов используют виртуальные хосты, поэтому обычно он будет таким же, как REQUEST_URI .
        QUERY_STRING Это строка запроса из запрошенного URL.
        REMOTE_ADDR IP-адрес удаленного хоста. Обычно это IP посетителя.

        Есть еще много переменных. Однако это хорошее введение. Если вам нужна дополнительная информация о переменных Apache, вы можете найти эту информацию в документации Apache.

        Подсказка:

        Важно отметить, что RedirectRule передается только URL-путь для сравнения с шаблоном. Это означает, что он включает в себя все, что находится после домена. Однако вы можете использовать переменные % {REQUEST_SCHEME} и % {HTTP_HOST} , чтобы включить схему и хост в шаблон.

        Как работает обратная ссылка

        В файле .htaccess шаблон RewriteRule , а также RewriteCond CondPattern могут содержать группы захвата.Группа захвата — это что-нибудь в скобках. На эти группы захвата можно ссылаться, чтобы включить захваченные строки в подстановке или TestString .

        Обратные ссылки на группу захвата CondPattern создаются с % 1 по % 9 .

        Обратные ссылки на группу захвата Pattern создаются с $ 1 до $ 9 .

        Обратные ссылки на группу захвата в регулярном выражении создаются с \ 1 по \ 9 .

        В этом примере первый набор правил перезаписи http://www.example.com будет перенаправлен на https://www.mydomain.com/example-com . Фактически, он перенаправит любой запрошенный корневой домен на https://www.mydomain.com/ , за которым следует запрошенный домен с точкой перед тем, как TLD будет заменен дефисом.

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

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

        Профессиональный совет:

        mod_rewrite разрешает обратные ссылки только на другие регулярные выражения в TestString и Substitution . Это означает, что % 1 и $ 1 нельзя использовать ни в Pattern , ни в CondPattern .

        Вы можете обойти это, передав содержимое % 1 или $ 1 вместе с вашей TestString вперед с внутренней обратной ссылкой и разделителем.(. *) $ https://www.mydomain.com/%2-%3 [R]

        В этом примере обратные ссылки % 2 и % 3 вызываются в TestString . Затем они захватываются с помощью (. *?) в CondPattern . Затем мы используем \ 1 в CondPattern для обратной ссылки на группу захвата (. *?) , которая захватила % 2-% 3 .

        Это в конечном итоге позволяет сравнить % {REQUEST_URI} с % 2-% 3 , что в противном случае невозможно.

        Есть еще


        Мы только прикоснулись к миру редиректов. Мощность и сложность mod_rewrite — замечательная вещь. Он часто используется в этом руководстве для решения проблем SEO.

        Надеюсь, это помогло вам понять основы работы перенаправления в файле .htaccess.

        Примеры перенаправления .htaccess | Пресс для скоропортящихся продуктов

        Наконец, собрал гигантский список из примеров перенаправления .htaccess .Он задуман как ресурс для быстрого копирования и вставки для тех, кто может искать различные методы переадресации. Здесь вы найдете перенаправления через mod_alias и mod_rewrite. Примеры включают перенаправление в любой каталог, подкаталог, ресурс, URL и из них, и многое другое. Большинство этих примеров взяты из моей предыдущей статьи «Глупые трюки с htaccess»; другие примеры взяты из предыдущих руководств по использованию .htaccess здесь, на Perishable Press. Наслаждаться! 🙂

        Редирект через mod_alias

        Эти примеры показывают, как выполнить перенаправление из одного места в другое с помощью модуля псевдонима Apache.Кроме того, вы можете изменить код состояния на все, что захотите (например, изменить с 301 на 302). А затем узнайте, как продвинуться дальше, с еще более интересными примерами перенаправления .htaccess.

        Перенаправить страницу на тот же домен

          Перенаправление 301 /page.php /page.html  

        Перенаправить страницу на другой домен

          Перенаправление 301 /page.php https://example.com/page.html  

        Перенаправить весь сайт

          Перенаправление 301 / https: // example.com /  

        Перенаправить весь сайт в подкаталог

          Перенаправление 301 / https://example.com/subdirectory/  

        Перенаправить из подкаталога на другой сайт

          Перенаправление 301 / подкаталог https://example.com/  

        Перенаправление с .html на .php

          RedirectMatch 301 (. *) \. Html https://example.com/$1.php  

        Запретить доступ к странице

          Перенаправление 403 /page. / subdirectory / (.пример \ .com $ [NC]
        RewriteRule (. *) Https://www.example.com/$1 [R = 301, L]  

        Код состояния

        Примечание: Вы можете изменить код состояния (то есть ответ сервера) для любого из предыдущих перенаправлений (через mod_alias или mod_rewrite). Просто измените текущий статус 301 на любой из следующих:

        • 301 — Постоянное перенаправление
        • 302 — Временное перенаправление
        • 403 — Запрещено
        • 410 — Исчез
        • Любой другой допустимый код статуса

        Похожие сообщения

        Об авторе

        Джефф Старр = Творческий мыслитель.Увлечен бесплатным и открытым Интернетом. USP Pro: неограниченное количество интерфейсных форм для сообщений, отправленных пользователями, и многое другое.

        .htaccess перенаправляет [KnownHost Wiki]

        Сложность

        Средняя

        Требования : Для этого требуется модуль mod_rewrite в apache. По умолчанию это включено во всех системах KnownHost.

        Файлы .htaccess можно использовать в корневом каталоге документов веб-сайта (например, / home / user / public_html /) для перенаправления посетителей веб-сайта с одного документа на вашем веб-сайте на другой.Правила .htaccess являются рекурсивными, что означает, что правила, написанные в /home/user/public_html/.htaccess, будут применяться к каталогам / home / user / public_html и / home / user / public_html / test /, если конкретное правило не отменено правилом в файл .htaccess в каталоге под ним.

        Существуют различные типы перенаправления, которые могут выполняться через файлы .htaccess. Давайте разберем их и разберемся с каждым типом, прежде чем научиться их использовать.

        301 (постоянное) перенаправление

        Это наиболее распространенный тип и, как правило, то, что вы захотите использовать.Хотя разница между 301 и 302 небольшая, она заметна. 301 (постоянный) указывает, что старый URL-адрес ссылки (перенаправленный URL-адрес ) больше не используется. В то время как перенаправление 302 предполагает, что старый URL-адрес временно отключен и вскоре возвращается.

        302 (временное) перенаправление

        Как указывалось ранее, перенаправление 302 — это временное решение для перенаправления. Это также правило перенаправления apache по умолчанию. Итак, при определении вашего метода / варианта вам нужно знать, постоянное ли это перенаправление или временное.

        Для всей документации / статей мы будем использовать 301 редирект.

        Создание файла .htaccess и загрузка его на сервер

        Создать файл .htaccess для перенаправления 301 или 302 очень просто. Вам просто нужно открыть ваш любимый редактор текста / документов и создать новый пустой файл. Добавьте в документ соответствующий код / ​​контент и сохраните файл как «htaccessrules.txt». После того, как вы подтвердите точные правила внутри документа, используйте свой любимый FTP 1) Client и загрузите документ в корень документа вашего веб-сайта (public_html).После того, как вы загрузили документ, просто переименуйте его .htaccess

        Через SSH или терминал это легко сделать с помощью вашего любимого текстового редактора (например, nano или vim), создав новый файл локально.

        Сценарии перенаправления и примеры кода

        Вот несколько примеров общих вещей, для которых используются правила перезаписи или перенаправления .htaccess.

        Перенаправить URL одной страницы (файл html / php) на другой

         Редирект 301 /retiredpage.html http: // www.(. *) $ http://www.knownhosttest.com/$1 [L, R = 301] 

        Перенаправить http на https (принудительно https)

        Вот два отдельных примера того, как это сделать. Мы можем сделать это с помощью Redirect в блоке If:

         <Если "% {HTTPS} == 'off'">
            Постоянное перенаправление "/" "https: //domain.tld"
         

        Это также можно сделать с помощью правил перезаписи. Возможно, лучше избежать этой сложности, но если в файле .htaccess уже есть правила перезаписи, в любом случае может потребоваться использовать правила перезаписи: 2)

         RewriteCond% {HTTPS} со скидкой
          RewriteRule (.*) https: //% {SERVER_NAME} / $ 1 [R = постоянный, L] 

        Полезные ссылки

        developmental / how-can-i-use-htaccess-for-redirects.txt · Последнее изменение: 11.06.2020, 07:43, Karson N. [ФЛАГИ]

        Давайте определим эти

        • Шаблон URL: шаблон регулярного выражения, который вызовет перезапись
        • Ссылка на файл: файл, который будет отображаться
        • ФЛАГИ: Дополнительные улучшения, такие как перенаправление или соответствие без учета регистра

        1.

        Символ каретки соответствует началу строки. В нашем случае строка — это URL. Редко вы исключаете каретку; без каретки вы можете ввести двусмысленность.

        (. *) Оператор точки для регулярных выражений соответствует любому символу. Следующий звездчатый квантификатор представляет «0 или более экземпляров». Таким образом, . * вместе дают «любой символ, 0 или более раз». Под «0 или более» я не подразумеваю, что символ должен повторяться: . * соответствует строкам aaaaa и 23e2323. Любой символ, любое количество раз.

        Скобка вокруг точки и * указывает механизму хранить (запоминать) эти совпадающие символы в том, что мы называем обратной ссылкой (что-то вроде переменной). Это позволяет нам (повторно) использовать эти символы позже, что чрезвычайно полезно!

        .html $ Мы знаем, что .html — это расширение. Однако, как определено выше, оператор точки обозначает любой символ. Таким образом, шаблон «.html» для механизма регулярных выражений может быть «9html» или «lhtml», чем угодно! Используя escape-символ, мы сообщаем движку, что хотим буквально сопоставить точку.

        Знак доллара соответствует концу строки. Комбинация каретки и знака доллара гарантирует, что наш шаблон соответствует всему URL-адресу, а не только его подстроке.

        Теперь, когда мы закончили шаблон, давайте взглянем на ссылку на файл.

        $ 1.php Скобки в шаблоне URL помогли нам захватить все символы до расширения .html. Мы можем получить доступ к этим обратным ссылкам через знак доллара.

        1 доллар соответствует первой обратной ссылке, 2 доллара соответствует второй и т. Д.

        Теперь файлы, такие как website.com/file.html, будут ссылаться на website.com/file.php

        Но в этом примере мы не хотим останавливаться на ссылке. Если бы мы не указали флаги в конце, код просто отобразил бы содержимое file.php, хотя URL-адрес по-прежнему остается file.html. Это просто дублированный контент!

        Размещая флаги [R = 301, L] в конце правила перезаписи, мы даем сигнал для фактического перенаправления на file.php и размещаем его в URL-адресе.

        Сначала это может показаться немного сложным, но после знакомства с основными регулярными выражениями вы легко поймете правила перезаписи, подобные этому.index.php $ http://www.yourwebsite.com/ [R = 301, L]

        5. Использование перезаписи в WordPress:

        Допустим, вы используете wordpress и хотите получить красивый URL-адрес для представляют список книг по автору на странице книг. WordPress выполняет свои собственные правила перезаписи, которые направляют все обратно в index.php, поэтому многие из ваших правил перезаписи не будут работать, потому что вы, вероятно, пытаетесь переписать URL-адрес, который уже был переписан!

        Обходной путь — использовать параметр GET для имени страницы для index.author /(.+)$ index.php? pagename = books & author = $ 1

        Таким образом, URL-адрес будет отображаться как www.buybooks.com/author/king, но сервер загрузит файл php, как если бы www.buybooks. com / index.php? pagename = books & author = king. Это означает, что у вас есть доступ к значениям через $ _GET на странице книг в вашей теме! Очень удобно для разработчика WP, желающего систематизировать информацию.

        Мир регулярных выражений весьма увлекателен. Перезапись позволяет вашим сайтам стать как более организованными, так и более гибкими!

        Как перенаправить ваш домен с помощью.htaccess

        В этой статье объясняется, как перенаправить ваш домен с помощью файла .htaccess с использованием общих правил перенаправления.

        .htaccess — это файл конфигурации для использования на веб-серверах, на которых запущено программное обеспечение веб-сервера Apache.

        Поскольку .htaccess является скрытым системным файлом, убедитесь, что ваш FTP-клиент настроен на отображение скрытых файлов. Обычно это опция в настройках / опциях программы.

        Примечание

        Предположим, что на вашем сервере установлен и включен mod_rewrite .

        Как перенаправить HTTP-запросы на HTTPS

        Чтобы перенаправить ваш веб-сайт для открытия через HTTPS, вы должны добавить следующее правило перезаписи в свой файл .htaccess:

         RewriteEngine On
        RewriteCond% {HTTPS}! = On
        RewriteRule. * Https: //www.domain.com% {REQUEST_URI} [R, L] 

        Это перенаправит ваш домен на https://www.domain.com

        . Если вы хотите, чтобы перенаправление работало без www, вы должны удалить его из правила перезаписи:

         RewriteEngine On
        RewriteCond% {HTTPS}! = On
        RewriteRule.* https: //domain.com% {REQUEST_URI} [R, L] 

        Это перенаправит ваш домен на https://domain.com

        Как перенаправить старый домен на новый домен

        Для перенаправления ваш старый домен на новое доменное имя, вы должны добавить следующее правило перезаписи в ваш файл .htaccess:

         RewriteEngine on
        RewriteBase /
        RewriteRule (. *) Http://www.new-domain.com/$1 [R = 301, L] [/ php] 

        Как перенаправить с URL-адреса, отличного от Www, на URL-адрес Www

        Для перенаправления вашего сайта с URL без www на www следует добавить следующее правило перезаписи в свой.(. *) $ http://www.domain.com/$1 [r = 301, nc]

        Как перенаправить страницу домена на другую страницу

        Чтобы перенаправить определенную страницу или раздел вашего сайта на другой, вы должны добавить следующее правило перезаписи в свой файл .htaccess:

         Redirect 301 / page-name http://domain.com/new-page 

        Как перенаправить весь сайт в подпапку

        In чтобы перенаправить весь ваш файл и загрузить его из подпапки, вы должны добавить следующее правило перезаписи в свой.htaccess файл:

         Redirect 301 / http://domain.com/subfolder-name/ 

        Как перенаправить подпапку в другой домен

        Чтобы перенаправить подпапку на другой сайт, вы должны добавить следующую перезапись Правило к вашему файлу .htaccess:

         Redirect 301 / subfolder-name http://different-domain.com/ 

        Как перенаправить все файлы с определенным расширением, но сохранить имя файла

        Если вам нужно расширение .html использовать то же имя файла, но использовать расширение..] +) $ $ 1.html [NC, L]

        Другие полезные перенаправления .Htaccess с примерами

        Перезапись и перенаправление URL-адресов с параметрами запроса (файлы, помещенные в корневой каталог)

        Исходный URL-адрес : http: // www.yourdomain.tld / index.php? id = 1
        Желаемый целевой URL : http: //www.yourdomain.tld/path-to-new-location/

        Вам следует добавить следующее правило перезаписи в свой.

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *