Любой сеошник знает, что сайт должен индексироваться поисковиками либо только по адресу www.domain.ruлибо только domain.ru, чтобы не было дублей страниц. Для этого нужно делать 301 редирект с www.domain.ru/* на domain.ru/* (или наоборот). В django такой редирект удобнее всего сделать через соответствующий middleware.

В файле middleware.py добавляем новый класс:

from django.http import HttpResponsePermanentRedirect

class WwwRedirect(object):
    """
    Редирект с www.domain.ru  на domain.ru
    """
    def process_request(self, request):
        hostname = request.get_host()  # доменное имя
        if hostname[:5] == 'www.':  # Если оно начинается на www.
            abs_url = request.build_absolute_uri()  # Получаем полный адрес страницы аместе с доменом
            abs_url = abs_url.replace('www.', '', 1)  # Убираем ПЕРВОЕ 'www' в адресе
            return HttpResponsePermanentRedirect(abs_url)  # Делаем 301 редирект на нужную страницу

Теперь добавляем наш middleware в settings.py:

MIDDLEWARE_CLASSES = (
    ...
    'path.to.middleware.WwwRedirect',
)

Вот и все. Теперь все запросы к домену с www будут редиректиться на ту же страницу, но без www.


10 июня 2018       Django

Теги: