Перенаправление доменов
Хотел бы рассказать в своей теме «Перенаправление доменов» как можно перенаправить свой домен с http://www.linux-notes.org на http://linux-notes.org а сделано это для улучшения поисковых систем (оптимизация СЕО). Так как поисковые системы видят один и тот же домен, но с привязкой «www», как разные домены и могут иметь разные ТИЦ и PR. И сейчас я Вам покажу как можно это реализовать и сделать это можно легко.
В данной теме я озвучу как можно это сделать с помощью 301-го перенаправления и так же с помощью 302-го перенаправления, они само часто используются на данный момент.
1. Перенаправление 301
— 301 редирект c www на без-www
Apache.
Для того чтобы «соединить» эти два домена в один, я рекомендую использовать 301 редирект с дериктивой для этого mod_rewrite.
нужно открыть файл который лежит в домашнем каталоге вашего сайта с названием .htaccess и прописать:
RewriteEngine On RewriteCond %{HTTP_HOST} ^www.linux-notes.org $ [NC] RewriteRule ^(.*)$ http://linux-notes.org/$1 [R=301,L]
Так что, http://www.linux-notes.org будет редиректить всех пользователей которые посещают ваш сайт и поисковых ботов на http://linux-notes.org.
Сейчас я расскажу более подробно о каждой строчке:
Директива RewriteEngine On подключает поддержку функции mod_rewrite, нужно прописать ее в только в том случае если до этого не существовало ее в этом файле, а если она уже имеется, то пропускаем.
Строка RewriteCond %{HTTP_HOST} ^www.linux-notes.org $ [NC] проверяет соответствует ли домен «www.linux-notes.org», а знак ^ говорит что это начало строки, а $ — это конец строки. Параметр в скобках [NC] говорит о том, что регистр букв в адресной строке не учитывается.
Строчка RewriteRule ^(.*)$ http://linux-notes.org/$1 [R=301,L] — это собственно сам редирект, где
параметр R=301 означает тип редиректа (301 Redirect, т.е. постоянный). L говорит о том, что это последнее правило.
Nginx.
Добавляем в виртуальный хост:
Например:
# vim /etc/nginx/conf.d/linux-notes.org.conf
И прописываем:
location / { if ($http_host ~* "^www.linux-notes.org $"){ rewrite ^(.*)$ http://linux-notes.org/$1 redirect; } }
Или:
server { server_name www.linux-notes.org; return 301 $scheme://linux-notes.org$request_uri; }
Если необходимо перенаправлять всех пользователей на другой сайт без учета http, https, www:
Apache.
RewriteEngine On RewriteRule ^.*$ http://www.linux-notes.org/launch/12?id=captain
Nginx.
Добавляем в виртуальный хост:
location / { rewrite ^(.*)$ http://www.linux-notes.org/launch/12?id=captain redirect; }
— 301 редирект c без-www на www
Apache.
Все тоже самое как в предыдущем примере, но в обратном порядке:
RewriteEngine On RewriteCond %{HTTP_HOST} ^linux-notes.org [NC] RewriteRule ^(.*)$ http://www.linux-notes.or/$1 [L,R=301]
Надеюсь тут и так понятно все, так как описывал подробно немного выше.
Nginx.
location / { if ($http_host ~* "^linux-notes.org"){ rewrite ^(.*)$ http://www.linux-notes.or/$1 redirect; } }
Или:
server { server_name linux-notes.org; return 301 $scheme://www.linux-notes.org$request_uri; }
— 301 Редирект с одной страницы на другую
Apache.
Например нужно вам перенаправить не весь сайт, на определенные его страницы, а можно сделать это:
RewriteEngine On RewriteCond %{HTTP_HOST} ^www.linux-notes.org [NC] Redirect 301 /old.php http://linux-notes.org/new.php
Nginx.
location /old.php { rewrite ^(.*)$ http://linux-notes.org/new.php redirect; }
— 301 редирект разрешения файлов
Apache.
Допустим, вы хотите поменять файлы «.html» на «.php», то можно это сделать:
RewriteEngine On RewriteCond %{HTTP_HOST} ^www.linux-notes.org [NC] RedirectMatch 301 (.*).html$ http://linux-notes.org$1.php
Nginx.
location ~ (.*).html$ { rewrite ^(.*)$ http://linux-notes.org$1.php redirect; }
-301 Редирект всех файлов раздела на один файл.
Apache.
Допустим, вы не хотите использовать раздел сайта /Linux-OS и хотите направить все запросы к папке /Linux-OS на один файл под названием /Linux-OS.php:
RewriteEngine On RewriteRule ^Linux-OS(.*)$ /Linux-OS.php [L,R=301]
Вам нужно сделать перенаправление всей папки, но кроме какого то файла? В данном примере все файлы из папки /Linux-OS будут перенаправлены на на файл /Linux-OS.php, но допустим кроме файла /Linux-OS/CentOS.php который будет перенаправлен на /CentOS-Linux.php, то прописываем:
RewriteEngine On RewriteRule ^Linux-OS/Linux-OS.php /CentOS-Linux.php [L,R=301] RewriteRule ^Linux-OS(.*)$ /Linux-OS.php [L,R=301]
ВНИМАНИЕ! Строка (.*)$ должна быть последней, а то перенаправление может не работать или вообще будет карявым, сайт может работать не правильно.
Nginx.
location /Linux-OS { rewrite ^/Linux-OS(.*)$ /Linux-OS.php redirect; }
и
location /Linux-OS { rewrite ^/Linux-OS/Linux-OS.php /CentOS-Linux.php redirect; rewrite ^/Linux-OS(.*)$ /Linux-OS.php redirect; }
— 301 Редиректим динамическй URL на новый файл.
Apache.
Например, вы хотите перенаправить динамический URL с параметрами на новый статический файл. Допустим, запрос к файлу вида http://linux-notes.org/Linux-OS.php?id=666 будет перенаправлен на файл http://linux-notes.org/Linux-OS.php:
RewriteEngine On RewriteRule ^Linux-OS.php?id=(.*)$ /Linux-OS.php [L,R=301]
Nginx.
location /Linux-OS { rewrite ^/Linux-OS.php?id=(.*)$ /Linux-OS.php redirect; }
Вот и все!
2. Перенаправление 302
Этот метод перенаправление похож на редирект 301, но в файл .htaccess нужно прописать нужные строки.
Для перенаправление страницы, используейте.
Apache.
Redirect /your-file-name.html http://www.linux-notes.org/temporary-directory/temporary-your-file-name.html
Nginx.
location /your-file-name.html { rewrite ^(.*)$ http://www.linux-notes.org/temporary-directory/temporary-your-file-name.html redirect; }
Для перенаправление дериктории, используейте.
Apache.
Redirect /directory http://www.linux-notes.org/temporary-directory
Nginx.
location /directory { rewrite ^(.*)$ http://www.linux-notes.org/temporary-directory redirect; }
Для перенаправление всего сайта, используейте.
Apache.
Redirect / http://www.linux-notes.org/
Nginx.
location / { rewrite ^(.*)$ http://www.linux-notes.org/ redirect; }
Перенаправление доменов завершено.
Some good site! Linux is god!