Завершающая точка в имени домена

Hoodie
На сайте с 27.11.2008
Offline
98
1166

Мой сайт работает на Win2003, Apache 2.2.11, nginx/0.7.65. Выделенный сервер.

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

Пример:

Пользователь набирает www.site.ru/page.html

Его всегда редиректит на site.ru/page.html

Такой редирект я сделал в .htaccess с помощью mod_rewrite. Все работает. Проблема, которую не могу решить: как убрать завершающую точку в имени домена на стороне сервера?

Пример:

Пользователь набирает site.ru./page.html (точка после ru)

Нужно чтобы редиректило также на site.ru/page.html (без точки после ru). Сейчас же веб-сервер возвращает страницу как ни в чем ни бывало. У пользователя в адресной строке остается эта злосчастная точка :gm: Соответственно и все относительные ссылки на странице тоже содержат точку после имени домена.

Пример из жизни: mail.ru. редиректит на mail.ru Вот нужно сделать также.

Не могу понять, где нужно её перехватывать. В .htaccess с помощью mod_rewrite не ловится (правило есть). Возможно, nginx ее отбрасывает при проксировании апачу. Перерыл гугл. Уперся в стену.

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

Hoodie добавил 24.03.2010 в 21:56

Спустя еще некоторое время гугления, нашел решение для nginx, убивающее обоих зайцев:

server {

listen 80;
server_name www.site.ru;
# перенаправляет с www.site.ru на site.ru
rewrite ^ http://site.ru$uri permanent;
}

server {
listen 80;
server_name site.ru;

# убирает завершающую точку в конце имени домена
if ($http_host ~ "\.$" ) {
rewrite ^ http://site.ru$uri permanent;
}
}

В блоке сравнения нужно использовать переменную $http_host, потому что в переменной $host этой самой точки в конце имени домена нет. Надеюсь, кому-нибудь пригодится это решение :smoke:

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий