14 September 2008

Организация постоянных редиректов с www.domain на domain и обратно.

System administration
Так исторически сложилось, что домены сайтов называют с префиксом www или без.

Есть несколько взглядов как истинно должен называться домен, прогрессивное человечество считает, что без www — nowww.ru, многие западные эксперты считают обратное.

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

В первую очередь нужно сказать, что редирект должен быть постоянным, т.е. отдавать код ответа 301 Moved Permanently для того, чтобы браузеры не запоминали url, с котрого был произведен редирект.

Общий принцип такой:
* описываем сервер с именем сервера, с которого делаем редирект
* указываем директиву для редиректа

Apache 2.2, 2.0, 1.3, RedirectMatch из mod_alias, тоже самое можно сделать при помощи mod_rewrite:
<VirtualHost *:80>
  ServerName              example.com:80
  RedirectMatch permanent (.*) http://www.example.com$1
</VirtualHost>


Nginx, rewrite из http_rewrite_module:
server {
  server_name example.com;
  rewrite ^(.*)$ http://www.example.com$1 permanent;
}



Дабы не указывать это правило для каждого домена можно воспользоваться отрицательным регулярным выражением:

server {
  server_name ~^(?! www\.);
  rewrite ^ http://www.$host$request_uri permanent;
}


При этом явно описанные сайты без www сюда уже не попадут — regex'ы
в server_name используются как last resort.

Автор решения Игорь Сысоев.

Будет здорово, если мы перечислим способы организации постоянных редиректов для других популярных web серверов.

UPD: добавлена заметка об общем редиректе для nginx
Tags:httpdnginxwwwredirect
Hubs: System administration
+33
20.8k 117
Comments 59
Top of the last 24 hours