.htaccess редирект на без www

Здравствуйте. Кто нибудь делал редирект всех адресов сайта на без www? Весь гугл пестрит

RewriteCond %{HTTP_HOST} ^www\.site\.ru$ [NC]
RewriteRule ^(.*)$ http://site.ru/$1 [R=301,L]
Все бы отлично но если взять не www.site.ru а www.site.ru/nameurl.html то… то получится ссылка вида site.ru/index.php?q=nameurl/
Николай
29 июля 2013, 18:29
modx.pro
3
12 306
0

Комментарии: 11

Александр Мелихов
29 июля 2013, 22:34
0
это из-за дружественных урлов модкса
посмотри закоментированные строки в ht.access
там есть решение конкретно под модкс
    Николай
    29 июля 2013, 22:55
    0
    Там абсолютно идентичные строчки закомментированы…
    Иван
    30 июля 2013, 10:47
    0
    Здравствуйте!

    Насчет закомментированных строчек для выхода из ситуации не знаю, но в свое время я столкнулся с необходимостью убрать дубли страниц, что требовалось по SEO (site.ru/index.php?id=..., site.ru/index.php?q=… и другие).

    Я написал скрипт, который можно оформить либо сниппетом в начале каждого шаблона, либо, что удобнее — плагином по событию.

    У меня включены дружественные вложенные урлы:

    При загрузке страницы — получаешь id и alias документа (если у контейнеров и неконтейнеров у тебя разные окончания, то смотришь изФолдер или нет)… Потом получаешь все alias родительских документов, склеиваешь все это дело в ссылку и делаешь 301 редирект. Есть еще нюансы с главной страницей, но, если возьмешься писать что-то подобное, то поймешь.

    То есть в итоге получится, что сервак у тебя перекинет на домен без www, а php уже докрутит это до дружественного урла. Заодно уберешь дубли страниц.

    Не считаю свой вариант каким-то оптимальным, но он работает.
      Иван
      30 июля 2013, 10:59
      0
      Хотя смотрю свой еще один сайтик… там вроде и так все ок, но у меня уже нет туда доступа, мне не посмотреть, что я там делал в htaccess.
      Илья Уткин
      30 июля 2013, 11:32
      3
      0
      Я использую такой код:
      RewriteEngine On
      RewriteBase /
      
      RewriteCond %{HTTP_HOST} ^www\.(.*) [NC]
      RewriteRule ^(.*)$ http://%1/$1 [R=301,L]
      Он работает независимо от домена, поэтому использую его в «сборке» для всех вновь создаваемых сайтов и не задумываюсь о редиректах
        Николай
        30 июля 2013, 14:13
        0
        Огромное спасибо Вам!!!
        Мордынский Николай
        30 июля 2013, 15:13
        0
        Вобще то в корне modx лежит файл htaccess и там прямо пример есть для редиректас www на без www и обратно просто надо свой домен вписать и разкоментировать
          Николай
          30 июля 2013, 15:20
          0
          #RewriteCond %{HTTP_HOST} !^example-domain-please-change\.com [NC]
          #RewriteRule (.*) http://example-domain-please-change.com/$1 [R=301,L]
          RewriteCond %{HTTP_HOST} ^www.site.ru$ [NC]
          RewriteRule ^(.*)$ http://site.ru/$1 [R=301,L]
          Я же написал, он ничем не отличается от моего варианта…
            Мордынский Николай
            30 июля 2013, 15:23
            0
            Я понимаю что, ответ уже адли просто на будующее для интересующихся разработчики уже об этом позаботились и решение лежит прямо в движке просто надо раскоментировать)
              Илья Уткин
              30 июля 2013, 17:42
              0
              Нет, у вас в первой строчке (в условии) указан знак конца адреса ($), потому работает только для главной странице.
              Если смотреть пример от разработчиков MODX, то ваш код должен был быть такой:
              RewriteCond %{HTTP_HOST} !^site\.ru [NC]
              RewriteRule (.*) http://site.ru/$1 [R=301,L]
            Илья
            08 сентября 2015, 22:16
            1
            0
            Для nginx:
            if ($host = "www.example.com") {
              rewrite ^ $scheme://example.com$uri permanent;
            }
            location / {
              try_files $uri $uri/ @modx-rewrite;
            }
              Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
              11