Crossroads » Linux » Apache: варианты перенаправления ссылок

Apache: варианты перенаправления ссылок

  • Dislike
  • +2
  • Like
Нередко возникает потребность в перенаправлении ссылок сайт внутри домена, или за его пределы. Ниже предоставлены самые распространённые задачи и их решения.

Пример: Сайт доступен по адресу domain.com и по адресу www.domain.com. С точки зрения поисковиков – это два разных адреса, где один адрес является зеркалом другого. Технически на этих адресах могут располагать два разных сайта. И в определённой ситуации поисковик может посчитать контент сайта неуникальным, так как он доступен по двум адресам. Многие вебмастера предпочитают перенаправлять все внутренние ссылки сайта на один адрес.

Для решения этих задач на стороне Apache должен быть включен Mod Rewrite, а PHP должен работать как модуль Apache.

Решение: Редирект с domain.com на www.domain.com. В корне сайта нужно создать файл с именем .htaccess и убедиться, что Mod Rewrite включен для вашего домена. В файле пишем следующее…

RewriteEngine on
Options +FollowSymLinks
RewriteCond %{HTTP_HOST} !^$
RewriteCond %{HTTP_HOST} !^www\.(.+)$ [NC]
RewriteCond %{HTTPS}s ^on(s)|
RewriteRule ^ http%1://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]


Строка «RewriteEngine on» включает Mod Rewrite для вашего сайта, в случае если Mod Rewrite на стороне Apache включен, но для вашего домена выключен. Её наличие так же не мешает, если Mod Rewrite для вашего домена уже включен.

Обратная ситуация:

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


Перенаправление главной страницы сайта.
Пример: На сайте в домене domain.com главной страницей является /index.php и доступна она как по адресу domain.com, так и по domain.com/index.php. Нужно оставить только первый вариант.

Решение: Так же, как и в предыдущем примере, создаём файл .htaccess следующего содержания…

RewriteCond %{THE_REQUEST} ^.*/index\.php 
RewriteRule ^(.*)index.php$ /$1 [R=301,L]


Перенаправление другой отдельно взятой страницы.
Пример: Страница была перенесена. Раньше материал находился по адресу domain.com/article.html, сейчас она находится по адресу domain.com/folder/article.html. Необходимо перенаправить запросы со старого адреса на новый.

Решение: В файле .htaccess пишем следующее…

Redirect 301 /article.html /folder/article.html


Перенаправление всех запросов с одного домена на другой.
Пример: Раньше сайт находился по адресу domain.com, сейчас он находится по адресу domain.net. Необходимо перенаправить все запросы на новый домен.

Решение: в файле .htaccess пишем следующее…

Redirect 301 / http://domain.net/


Сам файл размещаем в корневую папку домена domain.com.

Перенаправление определённых каталогов сайта на другой адрес.
Пример: сайт доступен по двум адресам: domain.com и domain.net. Нужно чтобы раздел /folder был доступен по адресу domain.com/folder, а раздел /folder2 по адресу domain.net/folder2.

Решение: Домены не должны быть припаркованы друг к другу на стороне регистратора. Один домен не должен быть алиасом другого на стороне Apache. В конфигурационном файле виртуальных хостов должны быть отдельные записи для обоих доменов. DocumentRoot (так же, как и блок Directory) у обоих доменов должны быть идентичны. (Как правило, конфигурационные файлы виртуальных хостов лежат в каталоге /etc/apache2/sites-available). То есть оба они смотрят в одну и ту же папку, где и располагается сам сайт. Предположим, что запись виртуального хоста для domain.com выглядит так:

<VirtualHost *:80>
	ServerName domain.com
	AddDefaultCharset UTF-8
	DocumentRoot /home/user/www/mysite/public-data
	<Directory />
…


Добавляем в неё редирект, после чего запись выглядит следующим образом:

<VirtualHost *:80>
	ServerName domain.com
        RedirectMatch 301 /folder2(.*) http://domain.net/folder2$1
	AddDefaultCharset UTF-8
	DocumentRoot /home/user/www/mysite/public-data
	<Directory />
…


Для домена domain.net нужно сделать то же самое, но со следующим редиректом:

 RedirectMatch 301 /folder(.*) http://domain.com/folder$1


Ограничение доступа к определённом каталогу по IP адресу.
Пример: На сайте есть каталог (например, domain.com/admin), доступ к которому необходимо ограничить и разрешить доступ только с двух IP адресов.

Решение: В каталог /admin необходимо поместить файл .htaccess следующего содержания…

SetEnvIf Remote_Addr "10.10.10.10|10.10.10.20" realremoteaddr 
Order Deny,Allow 
Deny from all
allow from env=realremoteaddr


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

Если необходимо закрыть доступ к определённому файлу (например, к domain.com/admin.php), то пишем то же самое, указав путь к файлу.

<Files admin.php>
SetEnvIf Remote_Addr "10.10.10.10|10.10.10.20" realremoteaddr 
Order Deny,Allow 
Deny from all
allow from env=realremoteaddr
</Files>


Файл .htaccess же помещаем в корень сайта.

Для запрета просмотра самого .htaccess необходимо в него же поместить следующее:

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

___
Tatyana K.



Tags: Apache, .htaccess


 
  • Creative Commons Licence
  • Norton Safeweb
  • Website Uptime Monitoring By ServiceUptime.com