.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/ Комментарии: 11
это из-за дружественных урлов модкса
посмотри закоментированные строки в ht.access
там есть решение конкретно под модкс
посмотри закоментированные строки в ht.access
там есть решение конкретно под модкс
Там абсолютно идентичные строчки закомментированы…
Здравствуйте!
Насчет закомментированных строчек для выхода из ситуации не знаю, но в свое время я столкнулся с необходимостью убрать дубли страниц, что требовалось по SEO (site.ru/index.php?id=..., site.ru/index.php?q=… и другие).
Я написал скрипт, который можно оформить либо сниппетом в начале каждого шаблона, либо, что удобнее — плагином по событию.
У меня включены дружественные вложенные урлы:
При загрузке страницы — получаешь id и alias документа (если у контейнеров и неконтейнеров у тебя разные окончания, то смотришь изФолдер или нет)… Потом получаешь все alias родительских документов, склеиваешь все это дело в ссылку и делаешь 301 редирект. Есть еще нюансы с главной страницей, но, если возьмешься писать что-то подобное, то поймешь.
То есть в итоге получится, что сервак у тебя перекинет на домен без www, а php уже докрутит это до дружественного урла. Заодно уберешь дубли страниц.
Не считаю свой вариант каким-то оптимальным, но он работает.
Насчет закомментированных строчек для выхода из ситуации не знаю, но в свое время я столкнулся с необходимостью убрать дубли страниц, что требовалось по SEO (site.ru/index.php?id=..., site.ru/index.php?q=… и другие).
Я написал скрипт, который можно оформить либо сниппетом в начале каждого шаблона, либо, что удобнее — плагином по событию.
У меня включены дружественные вложенные урлы:
При загрузке страницы — получаешь id и alias документа (если у контейнеров и неконтейнеров у тебя разные окончания, то смотришь изФолдер или нет)… Потом получаешь все alias родительских документов, склеиваешь все это дело в ссылку и делаешь 301 редирект. Есть еще нюансы с главной страницей, но, если возьмешься писать что-то подобное, то поймешь.
То есть в итоге получится, что сервак у тебя перекинет на домен без www, а php уже докрутит это до дружественного урла. Заодно уберешь дубли страниц.
Не считаю свой вариант каким-то оптимальным, но он работает.
Хотя смотрю свой еще один сайтик… там вроде и так все ок, но у меня уже нет туда доступа, мне не посмотреть, что я там делал в htaccess.
Я использую такой код:
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} ^www\.(.*) [NC]
RewriteRule ^(.*)$ http://%1/$1 [R=301,L]
Он работает независимо от домена, поэтому использую его в «сборке» для всех вновь создаваемых сайтов и не задумываюсь о редиректах
Огромное спасибо Вам!!!
Вобще то в корне modx лежит файл htaccess и там прямо пример есть для редиректас www на без www и обратно просто надо свой домен вписать и разкоментировать
#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]
Я же написал, он ничем не отличается от моего варианта…
Я понимаю что, ответ уже адли просто на будующее для интересующихся разработчики уже об этом позаботились и решение лежит прямо в движке просто надо раскоментировать)
Нет, у вас в первой строчке (в условии) указан знак конца адреса ($), потому работает только для главной странице.
Если смотреть пример от разработчиков MODX, то ваш код должен был быть такой:
Если смотреть пример от разработчиков MODX, то ваш код должен был быть такой:
RewriteCond %{HTTP_HOST} !^site\.ru [NC]
RewriteRule (.*) http://site.ru/$1 [R=301,L]
Для nginx:
if ($host = "www.example.com") {
rewrite ^ $scheme://example.com$uri permanent;
}
location / {
try_files $uri $uri/ @modx-rewrite;
}
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.