Так исторически сложилось, что домены сайтов называют с префиксом www или без.
Есть несколько взглядов как истинно должен называться домен, прогрессивное человечество считает, что без www — nowww.ru, многие западные эксперты считают обратное.
Однако речь не об этом, а о том, как в наших любимых web серверах организовать постоянный редирект туда-обратно.
В первую очередь нужно сказать, что редирект должен быть постоянным, т.е. отдавать код ответа 301 Moved Permanently для того, чтобы браузеры не запоминали url, с котрого был произведен редирект.
Общий принцип такой:
* описываем сервер с именем сервера, с которого делаем редирект
* указываем директиву для редиректа
Apache 2.2, 2.0, 1.3, RedirectMatch из mod_alias, тоже самое можно сделать при помощи mod_rewrite:
Nginx, rewrite из http_rewrite_module:
Дабы не указывать это правило для каждого домена можно воспользоваться отрицательным регулярным выражением:
При этом явно описанные сайты без www сюда уже не попадут — regex'ы
в server_name используются как last resort.
Автор решения Игорь Сысоев.
Будет здорово, если мы перечислим способы организации постоянных редиректов для других популярных web серверов.
UPD: добавлена заметка об общем редиректе для nginx
Есть несколько взглядов как истинно должен называться домен, прогрессивное человечество считает, что без 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