Проблема с WWW -> non-WWW redirect

Тема в разделе "Общие вопросы", создана пользователем Elias, 6 окт 2015.

  1. Elias

    Elias Новичок

    Сообщения:
    4
    Симпатии:
    0
    (сразу оговорюсь что уже задавал вопрос на другом форуме, но подходящего ответа /решения так не увидел. надеюсь тут кто-то разбирается в данном вопросе настройки серверов)

    1. При редиректе сайта с WWW на безWWW c помощью .htacceess, столкнулся с такой проблемой

    при загрузке страницы www.example.com/page получается example.com/index.php?_route_=page
    я понимаю что правило RewriteRule ^([^?]*) index.php?_route_=$1 [L,QSA] не распространяется на путь который начинается с WWW.
    как это исправить?

    кусок содержимого .htacceess
    Код:
    RewriteEngine On
    
    RewriteBase /
    RewriteRule ^sitemap.xml$ index.php?route=feed/google_sitemap [L]
    RewriteRule ^googlebase.xml$ index.php?route=feed/google_base [L]
    RewriteRule ^system/download/(.*) /index.php?route=error/not_found [L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_URI} !.*\.(ico|gif|jpg|jpeg|png|js|css)
    RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
    RewriteRule ^(.*)$ http://%1/$1 [R=301,L]
    RewriteRule ^([^?]*) index.php?_route_=$1 [L,QSA]

    2. Почему-то не пашет более правильный вариант на apache c httpd
    Код:
    NameVirtualHost *:80
    <VirtualHost *:80>
      ServerName example.com
      DocumentRoot "/path/to/site"
    </VirtualHost>
    <VirtualHost *:80>
      ServerName www.example.com
      Redirect 301 / http://example.com/
    </VirtualHost>
    
    при загрузке страницы www.example.com/page получается example.compage/
    т.е. между именем сайта и страницей нет "/"

    Я предпочитаю пойти по пути №2.
    Кто сталкивался с подобной проблемой, подскажите как решить?
     
  2. my2you

    my2you Продвинутый пользователь

    Сообщения:
    281
    Симпатии:
    125
    Свои правила редиректов, должны стоять ДО правил движка
     
  3. Elias

    Elias Новичок

    Сообщения:
    4
    Симпатии:
    0
    а можно ли более конкретно, с примером (лучше подтвержденным практикой) и по второму варианту желательно;)
     
  4. Slait

    Slait Эксперт

    Сообщения:
    503
    Симпатии:
    454
    RewriteCond %{QUERY_STRING} ^_route_=page/$
    RewriteRule ^(.*)$ http://www.example.com/page? [R=301,L]
     
    Последнее редактирование: 7 окт 2015
    Elias нравится это.
  5. Elias

    Elias Новичок

    Сообщения:
    4
    Симпатии:
    0
    такой комбинации еще не встречал, попробую
     
  6. Slait

    Slait Эксперт

    Сообщения:
    503
    Симпатии:
    454
    Это для редиректа страницы page, а для простого редиректа используй страндартный код
    Код:
    RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
    RewriteRule ^(.*)$ http://%1/$1 [R=301,L]
    И еще в чем может быть проблема, у Вас файл называется .htacceess
    а должен .htaccess
     
  7. my2you

    my2you Продвинутый пользователь

    Сообщения:
    281
    Симпатии:
    125
    Правила вставить после RewriteBase /
     
    Elias нравится это.
  8. Elias

    Elias Новичок

    Сообщения:
    4
    Симпатии:
    0
    Спасибо за ответ.
    Ошибки в написании названии файла нет. Тут опечатался. Важно что я хотел пойти путем изменения директив в httpd.conf, но не в .htaccess чтобы не использовать многократно движек rewrite
     
  9. my2you

    my2you Продвинутый пользователь

    Сообщения:
    281
    Симпатии:
    125
    а это правильно?? Все используют многократно и ничего...
     
  10. Zlata Jesen

    Zlata Jesen Продвинутый пользователь

    Сообщения:
    165
    Симпатии:
    98
    Проблема с этим самым редиректом - с www на "без www"
    Поставил один сайт на нас ссылку с www, изменить ее никак не могу - не покупная и они все свои ссылки только так так оформляют. Но обнаружила косяк - мало того, что стандартные записи в .htaccess не работают, так еще и если попадаешь на сайт с www, то кодировка страницы сбивается (и тут на демо, кстати, тоже: http://www.opencart-russia.ru/demo20/) - на верхние значки и звездочки оцененного товара обратите внимание.

    В .htaccess записано:
    Код:
    RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
    RewriteRule ^(.*)$ http://%1/$1 [R=301,L]
    Не перекидывает.

    Версия движка 2.1.0.2 (rs.1)
     
  11. solunski.d

    solunski.d Эксперт

    Сообщения:
    1.569
    Симпатии:
    432
    Скажи хостингу "Эй ты, да ты, чтобы через минуту .htaccess заработал, и возражения не приниматься иначе уйду".
    После этих слов он по любому даст разрешения вносить изменения.
    Некоторые хосты блокируют изменения.
     
  12. Zlata Jesen

    Zlata Jesen Продвинутый пользователь

    Сообщения:
    165
    Симпатии:
    98
    @solunski.d , вообще редиректы уже ставила и они работали без проблем и сразу, в частности, когда переносила сайт с движка на движок... редиректила ссылки. Про блокировку не слышала, хостинг бегет.
     
  13. solunski.d

    solunski.d Эксперт

    Сообщения:
    1.569
    Симпатии:
    432
    Пага, попробуй так
    Код:
    RewriteEngine On
    RewriteCond %{HTTP_HOST} ^example.ru
    RewriteRule (.*) http://www.example.ru/$1 [R=301,L]
    Только явно укажи домен сайта
     
  14. Zlata Jesen

    Zlata Jesen Продвинутый пользователь

    Сообщения:
    165
    Симпатии:
    98
    Да понятно, что example под замену.
    Не сработало.
    Как узнать, что блокирует?
    И еще вопрос: у меня RewriteEngine On для SEO URL прописан, его продублировать или просто две строки, что ниже под него вставить?
     
  15. solunski.d

    solunski.d Эксперт

    Сообщения:
    1.569
    Симпатии:
    432
    Если он есть значит не нужен.
    Apache или Nginx?
    Что у вас cPanel? Можно попробовать в cPanel поставить редирект на без www.
    Задать вопрос хостингу
     
  16. Ален

    Ален Эксперт

    Сообщения:
    2.056
    Симпатии:
    640
    На бегете ничего не блокируют, там все четко. Броблема видимо в закешированных запрсах в мозиле. Пробуйте проверить в хроме. Правила редиректа должны быть сразу после RewriteBase /
     
    Последнее редактирование: 10 фев 2016
  17. Zlata Jesen

    Zlata Jesen Продвинутый пользователь

    Сообщения:
    165
    Симпатии:
    98
    Вот как-то и без понятия была. На других сайтах сталкивалась проверяла, а тут пока нет. Загрузила phpinfo - апач.
    cPanel нету, у них своя специфичная, похожая на таймвебовскую.

    Уф. Это дома коллекция браузеров, тут (на работе) пришлось ставить. Но вообще и лису почистила - не помогает. Ни тут ни там.

    Код:
    RewriteEngine On
    RewriteCond %{HTTP_HOST} ^example.ru
    RewriteRule (.*) http://www.example.ru/$1 [R=301,L]
    Не ругайтесь, может я чего не понимаю, но cond это условие? А rule - правило?
    Мне надо с www на без оного. Директивы правильно прописаны?
    Или мне кажется, что это обратный порядок?
     
  18. Ален

    Ален Эксперт

    Сообщения:
    2.056
    Симпатии:
    640
    вы наоборот сделали. В самом начале темы написано правильно. В строке где 301, это туда и пойдет переадресация
     
  19. Zlata Jesen

    Zlata Jesen Продвинутый пользователь

    Сообщения:
    165
    Симпатии:
    98
    Я так и поняла. Но вариант из начала темы (6 пост) тоже пробовала - бесполезно.
    При этом я бы засомневалась, что редиректы вообще работают, но они работают.
    Работает к примеру :

    Redirect 301 /исходная ссылка http://сайт.ru/нужная ссылка

    С www по этому же принципу нельзя сделать?
    Хотя бы главную (ссылка-то на нее)?
     
    Последнее редактирование: 10 фев 2016
  20. Ален

    Ален Эксперт

    Сообщения:
    2.056
    Симпатии:
    640
    вы точно тот htaccess редактируете? Покажите сам файл, что у вас там.