.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
13 548

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

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

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

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

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

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

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

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