Привет, друзья. Сегодня хотелось бы обсудить очень заезженную, но всегда актуальную тему – это 301 Редирект (Permanent Redirect 301) – в seo-тусовке и без формальностей именно это подразумевается под словом «редирект». Технически это является ответом сервера на обращение к нему, этот ответ имеет код 301, обозначающий, что адрес обращения был изменен навсегда (moved permanently). В результате всех этих хитрых махинаций мы должны получить какой-то новый конечный адрес.
Я считаю, что вам не нужны эти технические аспекты, а потому хочу поговорить о прикладных вещах – когда и в каких ситуациях лучше использовать редирект, каким образом и при помощи каких команд можно настроить правила переадресации и т.д. А так же рассмотрим инструменты и сервисы, при помощи которых можно проверить правильность редиректов.
Еще я хочу поделиться случаями из моей практики, иногда попадаются такие, что и нарочно не придумаешь. Именно поэтому важно рассматривать такие ситуации, ведь можно никогда и не узнать о существующей проблеме со своим сайтом, а она будет мешать продвижению…
Так как пост вышел очень большим, то я решил сделать оглавление для вашего удобства:
- Редирект:
- Очень важные рекомендации!
- Практика редиректа:
- Проверка http-заголовков
Когда НЕОБХОДИМО делать 301 редирект
В первую очередь редирект применяется, когда страница (группа страниц или целый раздел) сменила свой адрес — чаще всего это случается при изменении структуры сайта, переименовании основообразующей части url’а или смене принципа формирования адресов (проще говоря, ЧПУ). К сожалению, не все об этом задумываются, когда что-то меняют на сайте, и в итоге возникает куча дублей, что приводит к потере позиций или даже наложению санкций со стороны поисковых систем. По своей работе я очень часто сталкиваюсь с такими ситуациями, и это стоит много нервов, чтобы все исправить и нивелировать последствия. От себя могу порекомендовать перед любой работой по смене типа ЧПУ или переделке структуры составить план текущей структуры сайта, всех его разделов и примеров конечных страниц. Все это необходимо будет проверить после завершения работ, чтобы при переходе по старому адресу мы попадали на новый, а сервер отдавал редирект с кодом 301 (а не 302).
Следующий частый случай использования 301 редиректа – смена адреса сайта или склейка зеркал. Если вы решили поменять адрес сайта в связи с ребрендингом компании или зарегистрировали новый более красивый и короткий домен для указания его на печатной промо-продукции — очень важно, чтобы при обращении к адресу на старом домене пользователь попадал на ту же самую страницу (а не на главную страницу), но на новом домене. Что касается промо-сайтов, то обычно они состоят из одной-двух страниц, ссылки с которых ведут на основной сайт, или же при переходе на промо-сайт сразу происходит редирект на специальную страницу основного сайта. Еще иногда при создании сайта регистрируется сразу несколько доменов, например, из-за неоднозначного написания имени компании на латинице. Чтобы интуитивно набирая адрес, пользователь попал куда надо, и регистрируются несколько доменов – очень важно, чтобы со всех «вспомогательных» доменов происходил 301 редирект на один основной адрес. Ни в коем случае нельзя допустить, чтобы по всем адресам был доступен один и тот же сайт.
И еще о зеркалах – может случиться так, что ваш сайт будет доступен по адресам http://www.site.ru, http://site.ru и https://site.ru (последнее редко, но бывает) – это все классические ошибки, которые нельзя допускать, и в их решении как раз участвует 301 редирект. Так же как и в случае с разными адресами сайтов, необходимо определиться с главным зеркалом (с www или без www) и настроить редиректы на основное зеркало. Конечно, поисковики не глупые и в таких ситуациях часто сами справляются, а так же им можно помочь, сделав правильные настройки в панелях вебмастера и в robots.txt (для Яндекса, директива Host). Но seo – дело тонкое, и я бы не стал полагаться на удачу, а воспользовался проверенным способом!
Иногда случается очень неприятная ситуация, когда копия сайта оказывается доступной не только при вводе в адресной строке названия домена, но и IP-адрес сервера. Такая ситуация вряд ли может произойти на виртуальном хостинге, а вот если у вас выделенный сервер, то запросто. Это может являться причиной некорректной настройки сервера – решить проблему поможет отключение возможности доступа при обращении к ip-адресу, но лучше всего здесь выручит 301-редирект на уровне веб-вервера (apache или nginx). Пару месяцев назад у меня случилась как раз такая ситуация – у меня был выделенный сервер, на котором висела часть сайтов, но под один из сайтов я решил взять еще один отдельный сервер. Я перенес сайт, все работало как часы, и вот однажды натыкаюсь в выдаче Гугла на клон моего сайта – шок, паника – оказалось, что это ip адрес моего нового сервера и, разумеется, на нем живет мой сайт, а при обращении сервер отдает ответ 200 OK, и Google проиндексировал его полностью. На предыдущем сервере такой проблемы не было, там изначально был настроен 301-редирект с ip на домен, указанный в качестве основного для этого ip. Теперь я научен горьким опытом и всегда проверяю такие вещи – будьте в курсе и вы, не повторяйте ошибок. Проблему решили путем добавления в конфиги веб-сервера nginx 301 редиректа на основной домен, пример кода покажу в практической части поста ниже.
Ситуация подобная предыдущей – когда копия сайта находится и доступна через служебный тестовый домен, например, вида site.hosting.ru. Такие случаи в моей практике тоже встречаются, и, в отличие от предыдущего случая, это свойственно как раз для виртуального хостинга. Для чего такое существует? Например, у вас еще не куплен домен или вы переносите сайт с одного хостинга на другой, а NS сервера для домена не сменили, или еще не обновились записи DNS у провайдера. В таких ситуациях и делают тестовые адреса, где вы можете все настроить и установить, прежде чем перенаправлять адрес сайта на новый хостинг. И вот некоторые хостеры грешат тем, что не закрывают доступ к таким техническим адресам и при этом даже не запрещают их индексацию. Если и у вас случилась эта неприятная ситуация, то стоит попробовать прописать 301-редирект с технического адреса на основной в файле .htaccess.
Ну и, конечно же, 301 редирект очень любят применять правильные сеошники для борьбы с различными дублями страниц. Почему только правильные сеошники? Да потому, что неправильные хуй забили на сайт клиента и, что вполне вероятно, даже не заходя на сайт, стали закупать ссылки – увы, это не редкость. Ко мне периодически обращаются заказчики, которые хотят проверить добросовестность своих подрядчиков/сотрудников, отвечающих за оптимизацию и продвижение сайта, насколько качественно идет работа – заказывают seo аудит сайта – и пока еще ни разу не было такого, чтобы я не нашел на сайтах ошибок или недоработок. Так что, имейте в виду – я всегда рад вам помочь. Вернемся же к дублям – я считаю, что вместо того чтобы закрывать дубли от индексации, необходимо делать редирект на основной адрес, а всякие rel=”canonical” это уже не так интересно. Разумеется, существует масса случаев, когда дубли вынужденные, и тогда без канонизации не обойтись, но если есть возможность сделать редирект, обязательно делайте его. Частые случаи дублей, которые необходимо проверять всегда: адреса со слешем на конце и без, адреса с параметрами и метками – как это решать, я расскажу ниже.
Когда МОЖНО делать 301 редирект
В этом разделе много не напишешь, но я постараюсь. Очень надеюсь, что после прочтения вы в комментариях добавите мне парочку идей.
Redirect 301 можно использовать в качестве ответа сервера вместо ошибки 404 Not Found – другими словами, пользователь, перейдя по неправильной ссылке или на несуществующую страницу, увидит не сообщение, мол, «Извините, такой страницы больше нет», а будет перемещен на другую существующую страницу. Это очень спорный момент среди специалистов, а потому я свое мнение никому не навязываю. Но я предпочитаю использовать именно редирект вместо 404 ошибки, и тут существует несколько вариантов развития событий… Смотрите, есть 2 категории 404 ошибок: первая – классическая, когда страницу действительно удалили, вторая – когда появление ошибки связано с кривыми внешними ссылками. В первом случае, наверное, не стоит делать редирект, а оставить 404 ошибку как она есть. А вот во втором случае стоит озаботиться редиректом на правильный url-адрес, если его можно восстановить из битой ссылки, или редиректом на главную страницу (или категорию).
Когда НЕ СЛЕДУЕТ делать 301 редирект
Несколько слов о том, когда редирект может вам навредить, а потому его не стоит использовать в следующих ситуациях.
Самое главное, чтобы не наделать ошибок, не стоит связываться с редиректами, если вы на 100% не уверены в том, что вы делаете или в чем-то сомневаетесь. Примите это как дружеский совет :)
Перманентный редирект не стоит использовать для временных решений, это очевидно из его названия – для временного перемещения используйте 302 Moved Temporarily. При этом не произойдет склейки страниц и страницу с редиректом можно будет в любое время восстановить.
Если с вашим доменом случились проблемы, например, фильтры, бан и т.п., и вы решили сменить адрес сайта (домен), то не стоит делать 301 редирект со старого домена на новый — в результате вы «приклеите» к новому домену и все проблемы старого. То есть в итоге ничего и не изменится. Да, было какое-то время решение выхода из под гугло-фильтра Пингвин при помощи полного 301-редиректа со старого домена на новый. Действительно все позиции восстанавливались до уровня как до санкций, и это казалось панацеей от злого Пингвина, но при очередном апдейте алгоритма эта особенность была учтена и новый домен так же попадал под фильтр, в итоге ничего не улучшалось после смены домена. Если уж вы решили сменить домен, то можно попробовать перенести весь контент на новый домен, а на старом его удалить и повесить заглушку с сообщением о переезде, а еще лучше начать все «с нуля».
Существует очень много способов сделать 301-редирект: через htaccess, php, javascript, настройки сервера и т. д. – так вот не надо пытаться использовать сразу все методы одновременно, слишком велика вероятность «разногласий» между разными способами и можно, например, получить бесконечное циклическое перенаправление.
Важные рекомендации и советы при работе с редиректами
Когда вы работаете со сложной структурой сайта или перерабатываете большой портал, часто случаются множественные редиректы или длинные цепочки. Это значит что редирект происходит не в один шаг, а в два и более – это плохая ситуация и ее надо по возможности избегать. При переходе по такой ссылке поисковый робот, получив несколько перенаправлений подряд, может подумать, что его обманывают и прекратить следовать дальше и вообще перестать учитывать ссылки. Вот вам пример из моей практики, однажды мне на аудит попался сайт с такой неожиданной цепочкой:
http://site.ru/tax/term/30 ->
http://www.site.ru/tax/term/30 ->
http://www.site.ru/tax/term/30/ ->
http://www.site.hosting.ru/404.php ->
http://www.site.ru/404.php
А еще в итоге страница http://www.site.ru/404.php, которая должна отдавать 404 ошибку, отдает ответ 200 OK. Это даже мне взорвало мозг, а представьте, что подумал бы поисковый робот, попав в такую карусель! Мало того, что в цепочке поучаствовали три разных домена, так еще и страница ошибки говорит, что она не ошибка и ее надо индексировать.
По возможности стремитесь к отсутствию редиректов внутри сайта – если внешние ссылки на сайт исправить уже нельзя и редирект неизбежен, то внутренние ссылки надо стараться исправлять. Может быть это и не скажется на качестве индексации и ранжировании, но и нельзя быть уверенным наверняка, а потому лучше избегать таких спорных ситуаций. В отслеживании внутренних редиректов и вообще ошибок внутри сайта вам поможет замечательная программа CompraseR.
Составляя привила редиректов в .htaccess исключайте реальные адреса директорий и файлов на сервере и следите за выборкой. Ситуация для сайта, попавшего мне однажды на аудит – в борьбе с дублями страниц категорий со слешем на конце и без, вебмастер перестарался немного и наоборот только усугубил проблему. Мало того, что под правила перезаписи попали и реальные файлы js-скриптов и css-стилей из-за чего они перестали корректно работать, так еще и некоторые страницы получили ненужный слеш на конце и появились дубли. Друзья, тщательно следите, чтобы составленные правила распространялись только на ту группу адресов, с которой вы работаете, и ограничивайте все остальные.
Для поиска проблемных страниц и их адресов, от которых необходимо избавиться, используйте возможности панелей вебмастера от Яндекс и Google. Для Яндекса Вебмастер: Выбираем сайт –> Индексирование сайта –> Исключенные страницы. Для Google Webmaster: Выбираем сайт –> Оптимизация –> Оптимизация HTML; А так же: Выбираем сайт –> Конфигурация –> Параметры URL.
Особенности индексации и переиндексации редиректов в Яндекс и Google. Когда вы будете бороться с дублями и проблемными адресами, разумеется, вы будете ждать удаления ошибок из панелей вебмастера, тут есть некоторые особенности. С Google все просто – настроили редиректы, изменения проиндексируются в течение 2 недель, за это же время начнут исчезать ошибки и из панели вебмастера, обычно через месяц все ошибки пропадают. С Яндексом же есть тонкость, и заключается в следующем – после простановки редиректов можно ждать пропадания ошибок из панели вечно, я ждал однажды полгода, пока не написал в поддержку, где мне сообщили, что помимо редиректа необходимо дополнительно закрыть проблемные страницы в robots.txt и только тогда они пропадут из панели вебмастера.
Вообще рекомендую прочитать официальные мануалы от поисковиков по теме: Переадресация 301 от Google и Обработка перенаправлений (редиректов) от Яндекс.
Permanent Redirect 301 через .htaccess
Такой способ установки редиректов является самым популярным и простым. Хотя, признаться, далеко все не так просто, как кажется, так что я планирую написать отдельный пост про htaccess. Из плюсов данного способа можно отметить, что редирект срабатывает на уровне сервера и до запуска обработки любых скриптов сайта и не несет дополнительной нагрузки.
У вас на сервере (в корне, там где главный index.php) уже наверняка есть файл .htaccess. Если этот файл не видно:
- Проверьте настройки ftp-менеджера, он может скрывать системыне файлы, коим и является файл htaccess
- Зайдите в файловый менеджер через панель управления хостера и проверьте права для файла. Я имею ввиду не CHMOD, а группу и пользователя, например, там может стоять пользователь root, а вы подключаетесь через ftp используя доступ пользователя владельца домена.
- Банально файла может не быть :) Тогда его следует создать, но под windows иногда возникает проблема, т.к. по сути файл .htaccess видится системой как файл без имени и только с расширением. Предлагаю простой способ – создаем обычный txt-файл, добавляем в него строку «RewriteEngine On» (без кавычек), загружаем txt-файл на сервер, на сервере переименовываем файл в .htaccess
Большинство правок, связанных с редиректом следует писать в самом начале файла после строки «RewriteEngine On», чтобы эти правила обрабатывались в первую очередь. Важно соблюдать последовательность действий, т.к. команды обрабатывается сервером построчно с самого начала и до первого вхождения. Иначе говоря, надо всегда начинать с частной и заканчивать более общей выборкой.
Давайте рассмотрим несколько самых распространенных и полезных примеров:
301 редирект для домена с www.site.ru на site.ru
RewriteCond %{HTTP_HOST} ^www\.(.*) [NC] RewriteRule ^(.*)$ http://%1/$1 [R=301,L] |
301 редирект для домена с site.ru на www.site.ru
RewriteCond %{HTTP_HOST} !^www\.(.*) [NC] RewriteRule ^(.*)$ http://www.%1/$1 [R=301,L] |
Вышеописанные варианты редиректа отлично работают и не требуют никаких правок с вашей стороны — только вставить в .htaccess файл. Однако для 100% надежности я бы посоветовал вам другой вариант:
RewriteCond %{HTTP_HOST} !^www.site.ru$ [NC] RewriteRule ^(.*)$ http://www.site.ru/$1 [R=301,L]Либо
RewriteCond %{HTTP_HOST} !^site.ru$ [NC] RewriteRule ^(.*)$ http://site.ru/$1 [R=301,L]Первый для тех, у кого основной домен с www, второй – у кого без www. Соответственно в обоих примерах надо вместо «site» вписать название вашего домена.
Итак, чем же данные варианты лучше? Очень просто, они проверяют не только отсутствие/наличие www в имени домена, но проверяют и имя домена на полное его соответствие.
Живой пример: Наверняка вы сталкивались с тем, что неожиданно сайт может проиндексироваться по служебному адресу на хостинге (такой адрес выдается, чтобы к сайту можно было обратиться до привязки вашего реального домена), какому-нибудь зеркалу или вообще ip-адресу! Так вот универсальные правила будут лишь верифицировать отсутствие/наличие www, при этом все равно, к какому домену обращается пользователь или поисковый робот.
Так вот воспользовавшись продвинутым вариантом, вы на 146% будете уверены, что ваш сайт будет доступен только и исключительно по указному лично вами доменному имени и с учетом www. Я пользуюсь только таким вариантом и вам рекомендую!
301 редирект с http на https
В свете массового перехода сайтов на защищенный протокол, необходимо знать, как сделать редирект с http на https. Кстати, если вы еще не выбрали SSL-сертификат, вам стоит прочитать мой пост про SSL сертификат для сайта — для чего он нужен и где его взять.
Ниже я предлагаю вам несколько вариантов 301 редиректа с протокола http на https, которые могут работать либо не работать в зависимости от конфигурации именно вашего сервера, но какое-то из правил вам точно подойдет:
RewriteCond %{HTTPS} !=on RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L] |
RewriteCond %{SERVER_PORT} !^443$ RewriteRule ^(.*)$ https://%{SERVER_NAME}%{REQUEST_URI} [R=301,L] |
RewriteCond %{ENV:HTTPS} !on RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L] |
RewriteCond %{HTTP:X-HTTPS} !1 RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L] |
RewriteCond %{HTTP:CF-Visitor} '"scheme":"http"' RewriteRule ^(.*)$ https://site.ru/$1 [R=301,L] #site.ru надо заменить на ваш домен |
RewriteCond %{HTTP:X-Forwarded-Protocol} !=https RewriteRule ^(.*)$ https://%{SERVER_NAME}%{REQUEST_URI} [R=301,L] |
Если возникает циклический редирект, то воспользуйтесь этим вариантом:
RewriteCond %{HTTPS} off RewriteCond %{HTTP:X-Forwarded-Proto} !https RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L] |
Редирект с протокола https на http (честно, не знаю, зачем вам может это понадобиться):
RewriteCond %{HTTPS} =on RewriteRule ^(.*)$ http://%{HTTP_HOST}/$1 [R=301,L] |
Недавно я написал очень подробную инструкцию как правильно перевести сайт с HTTP на HTTPS без потерь. Если вы планируете переезд с https на https, вы обязаны ее прочитать!
Внесу некоторую ясность в непонятную абракадабру:
- RewriteCond обозначаем условие, при совпадении с которым будет выполнено правило RewriteRule. С помощью регулярных выражений задаются шаблоны строк.
- Переменные сервера:
- %{REQUEST_URI} — часть урла без доменного имени и GET-параметров, например, для страницы, которую вы сейчас читаете:
blog/post/4393
, - %{HTTP_HOST} — хост или доменное имя, например:
alaev.info
- %{QUERY_STRING} — строка с набором GET параметров, то есть часть урла после знака вопроса (и до решётки якоря, если он есть).
- %{REQUEST_FILENAME} — полный путь в файловой системе сервера к файлу или скрипту соответствующим этому запросу. Чтобы было понятно, адрес скрипта, как нам это привычно такой —
alaev.info/index.php
, а вот в файловой системе сервера это страшная строка/var/www/alaev_info/data/www/alaev.info/index.php
.
Бывает, делая редирект, вы получаете неожиданный результат, например, хотели в адресеhttp://site.ru/page-name?post=17434801_4060
убрать параметрыpost=17434801_4060
, указали соответствующие правила (о них ниже будет написано), а в итоге получили строкуhttp://site.ru/usr/local/www/site.ru/www/page-name
— от параметров избавились, но получили странный адрес. Это все потому, что вы не указали в начале файла после RewriteEngine On директиву RewriteBase /, которая устанавливает конкретный, базовый URL для преобразований в контексте каталога.
- %{REQUEST_URI} — часть урла без доменного имени и GET-параметров, например, для страницы, которую вы сейчас читаете:
- Метасимволы используются для задания групп символов или «меток» в шаблоне:
- ^ — метка начала строки,
- $ — метка конца строки,
- ! – отрицание,
- \ — экранирующий слеш, позволяет считать следующий за ним метасимвол обычным символом,
- . – точка, обозначает любой символ, но только один,
- () – группировка.
- Модификаторы ставятся после обычных символов, метасимволов или их групп и расширяют возможности использования шаблонов:
- ? — символ повторяется 0 или 1 раз,
- * — Повторяется от 0 до 65536 раз,
- + — Повторяется от 1 до 65536 раз.
- Флаги определяют дополнительные опции для данного правила и перечисляются в квадратных скобках через запятую:
- NC — (nocase) отключает проверку регистра символов.
- R — (redirect) останавливает процесс преобразования и возвращает результат браузеру клиента как редирект на данную страницу (302, MOVED TEMPORARY). С данным флагом можно указать другой код результата, например R=301 возвратит редирект с кодом 301 (MOVED PERMANENTLY). Как вы понимаете, это то самое, что нам и надо.
- L — (last) останавливает процесс преобразования, и текущая ссылка считается окончательной.
Самый популярный случай — 301-редирект с index.php (html) на главную страницу. На 90% сайтов встречается проблема дублирования главной страницы по адресам http://site.ru и http://site.ru/index.php (или index.html, index.htm или любой другой вариант, не принципиально, а то и все сразу). Где-то это явно, когда, например, ссылка из логотипа ведет на site.ru, а ссылка в меню ведет на site.ru/index.php, где-то не явно, когда дубль находится при вводе адреса с index.php вручную. Важно просто решить проблему. И я предлагаю универсальный вариант, вот он:
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.(php|html|htm)\ HTTP/ RewriteRule ^(.*)index\.(php|html|htm)$ $1 [R=301,L] |
Просто вставьте этот код без изменений после строки после строки «RewriteEngine On» и нет проблем!
Многие, кто начинает бороться с дублями на сайте, задаются вопросом, а откуда берутся такие вот ссылки, которые дублируют основную страницу http://site.ru/page-name.html&post=-1234567_8901? Откуда взялась приставка &post=-1234567_8901 – это «добро» берется из вконтакте, когда кто-то делится ссылкой на ваш сайт у себя на стене, в группе или паблике, то автоматически добавляется подобная строка, видимо, для отслеживания какой-то статистики.
Чтобы избавиться от этой ерунды раз и навсегда необходимо добавить в htaccess:
RewriteCond %{REQUEST_URI} ^(.*)\&post= RewriteRule ^(.*)\&post=(.*)$ $1 [R=301,L] |
Чтобы вам был понятен принцип, я приведу еще один пример, его как раз предложили решить в комментариях. Иногда вы можете обнаружить у себя вот такие ссылки:
http://site.ru/&sa=U&ei=AsguT72dLdHLtAaZ0tyVDQ&ved=0CCwQFjAIOFo&usg=AFQjCNFwbE9i0bqrQUGJLoDh6xyVd1nhxg
Что печально — эти ссылки индексируются Гуглом и попадают в выдачу.
Но не об этом речь, я просто хочу, чтобы вы поняли механизм 301-редиректа в подобных случаях, а не задавали мне вопросы в коментариях по каждому случаю. А решение будет таким:
RewriteCond %{REQUEST_URI} ^(.*)\&sa= RewriteRule ^(.*)\&sa=(.*)$ $1 [R=301,L] |
Как видите, никакой разницы между этим и предыдущим случаем нет, пусть у вас в url'е будет &post= или &sa= или что угодно — решение одинаковое, просто надо заменить очевидные части кода. Понятно же, правда?
Избавляемся от параметров или меток в адресе
Вопрос задавался и в комментариях и много раз на форуме, потому нельзя его обойти стороной. Что делать вот с такими дублями: http://site.ru/?abrakadabra или более реальный случай http://site.ru?utm_source=twitterfeed&utm_medium=twitter
Данный случай немного отличается от следующего пункта, где мы будем избавляться от параметров для php-скрипта, так как тут обычный адрес и параметры в скрипт мы не передаем. Вот решение:
RewriteCond %{QUERY_STRING} ^utm_source= [NC] RewriteRule (.*) $1? [R=301,L] |
Как вы понимаете, значение «utm_source=» можно заменить на вашу «abrakadabra» и так жу будет происходить 301-редирект на адрес без всякой абракадабры.
Пример избавления от параметров скрипта в url страницы
Пусть мы хотим в адресе http://site.ru/index.php?lang=ru избавиться от параметра lang=ru так, чтобы на выходе получить http://site.ru/index.php.
В .htaccess необходимо прописать такие строки:
RewriteCond %{QUERY_STRING} ^lang=ru$ RewriteRule ^(.*)\.php\?(.*)$ $1\.php [R=301,NC,L] |
%{QUERY_STRING} — это строка с набором переменных для PHP, часть урла после знака вопроса (и до решётки якоря, если он есть).
Вызываем url — http://site.ru/index.php?lang=ru
RewriteCond %{QUERY_STRING} ^lang=ru$
Запрашиваемый url попадает под это правило, других правил нет, поэтому будет выполнен RewriteRule строкой ниже.
RewriteRule ^(.*)\.php\?(.*)$ $1\.php [R=301,NC,L]
Исходный url: http://site.ru/index.php?lang=ru
Шаблон разборки url’а: ^(.*)\.php\?(.*)$
URL будет разобран по переменным: $1 = http://site.ru/index, $2 = lang=ru и собран обратно уже в виде http://site.ru/index.php ($1\.php)
А далее будет 301 редирект на новый url.
Пример правил при смене структуры сайта
RewriteRule ^post/category/(.*)$ blog/category/$1 [R=301,L] RewriteRule ^post/(.*)$ blog/post/$1 [R=301,L] |
Вот такие строки мне пришлось добавить в htaccess файл, когда я сменил структуру своего блога.
Раньше у меня были адреса такие: https://alaev.info/post/4358 и https://alaev.info/post/category/seo, что как-то ломало логику в структуре – ведь блог это только часть сайта, но почему-то посты принадлежат сайту, а не блогу, а категории принадлежат постам, что тоже совсем нелогично. Я решил логику восстановить, и получилось: https://alaev.info/blog/post/4358 и https://alaev.info/blog/category/seo — теперь блог как отдельный раздел сайта, а посты принадлежат ему, и категории принадлежат блогу, а не постам.
Из этого же примера видно, что важно соблюдать последовательность правил. Если бы я поменял строки местами, то есть впереди бы шла строка RewriteRule ^post/(.*)$ blog/post/$1 [R=301,L] то редирект с адреса https://alaev.info/post/category/seo шел на страницу https://alaev.info/blog/post/category/seo а не как надо на https://alaev.info/blog/category/seo.
И последний пример — разбор частой ошибки с адресом от корня сервера
Например, вы решили исправить такую проблему, когда страница категории доступна по двум адресам http://site.ru/razdel/podrazdel/index.php и http://site.ru/razdel/podrazdel/. Второй url является правильным и основным, а url с index.php на конце является полным дублем, от которого необходимо избавиться.
Для того чтобы сделать редирект с index.php на категорию вы прописываете правило:
RewriteRule ^(.*)index\.php$ $1 [R=301,L] |
А в итоге при обращении к странице: http://site.ru/razdel/podrazdel/index.php
Редиректит на что-то подобное: http://site.ru/home/site.ru/public_html/razdel/podrazdel/
Т.е. почему-то выводит полный путь от корня сервера.
Для решения этой проблемы (и не только этой, кстати) необходимо, чтобы в начале .htaccess файла стояла не просто строка RewriteEngine On, но после нее шла еще одна, которая обрезает полный путь (от корня сервера) до корня сайта, вот так:
RewriteEngine On RewriteBase / |
301-редирект со страницы на страницу, на новый адрес
Самый простой случай, когда надо сделать редирект одной страницы на другой адрес. Если же вам надо сделать редирект для нескольких страниц, то придется писать несколько правил, но в этом случае лучше воспользоваться шаблонами, описанными выше. Есть несколько совершенно идентичных вариантов синтаксиса:
Redirect 301 /page-name1.html http://site.ru/page-name2.html Redirect permanent /page-name1.html http://site.ru/page-name2.html RedirectPermanent /page-name1.html http://site.ru/page-name2.html |
Выбирайте один из трех, а лично я предпочитаю первый вариант — он короче, проще и понятнее. Кстати, здесь site.ru может быть не обязательно тем же самым доменом, но любым другим.
На этом закончим с .htaccess и перейдем к PHP.
Permanent Redirect 301 с помощью PHP
Обычно PHP редирект я использую, когда возникают трудности с .htaccess или оказывается так, что функция на php оказывается более логичной и понятной.
Сам синтаксис 301 редиректа на php выглядит следующим образом:
header("HTTP/1.1 301 Moved Permanently"); header("Location: http://site.ru"); die("Redirect"); |
Эти строки сообщают браузеру клиента, что с какой-то запрошенной страницы необходимо произвести перманентный редирект на адрес http://site.ru. При этом http://site.ru может являться не только адресом главной страницы текущего сайта, но может быть и любым другим сайтом. Если же что-то пошло не так и произошла ошибка, то в окне браузера мы увидим надпись «Redirect».
Чтобы было понятнее, приведу несколько примеров функций, которые я написал для своего блога alaev.info, пытаясь решить определенные задачи.
Функция, позволяющая убрать определенный кусок из url
if (strpos($_SERVER['REQUEST_URI'], 'http://alaev.info') !== false) { $real_page_url = "http://alaev.info".str_replace ( "/http://alaev.info", "", $_SERVER['REQUEST_URI'] ); header("HTTP/1.1 301 Moved Permanently"); header("Location: $real_page_url"); die("Redirect"); } |
Однажды у меня возникла проблема, что в панели вебмастера вылезла куча 404 ошибок, адреса этих страниц были вида https://alaev.info/https://alaev.info/post/4358, т.е. откуда-то в адресе появился дублирующий адрес сайта. И тогда я написал функцию, которая проверяет, есть ли в URI (заметьте, не URL, а URI) вхождение «http://alaev.info», и если присутствует, то вырезаем из адреса этот кусок и записываем результат в переменную $real_page_url, а потом делаем 301-редирект на верный адрес из переменной.
Функция, убирающая конечный слеш из url
if ( ( $_SERVER['REQUEST_URI'], - 1, 1 ) == '/' ) { $requested_url = rtrim($requested_url, '/'); header("HTTP/1.0 301 Moved Permanently"); header("Location: $requested_url"); die("Redirect"); } |
Вот такая вот простейшая функция, которая смотрит, есть ли в запрошенном адерсе страницы слеш на конце, и если он есть, то слеш обрезается и происходит 301-редирет на адрес без слеша.
Существует еще масса вариантов, позволяющих отдавать команду перенаправления на разных языках программирования, типа ASP, Ruby on Rail и т.д., но я с этими языками не знаком, потому не буду тут умничать и пудрить вам мозги. Еще возможны редиректы при помощи метатега meta refresh, а так же редиректы на javascript – но это участь нечистых на руку дорвейщиков, а поисковики эти редиректы не понимают, они получаю ответ от сервера 200 OK. Так что эти варианты мы не рассматриваем.
Permanent Redirect 301 для сервера nginx
Помните я писал про зеркало моего сайта, доступного по ip? В итоге проблему решили редиректом, прописанным в конфигурационном файле сервера, обычно он расположен тут /etc/nginx/nginx.conf. Там прописали вот такие строки:
server { listen 1.2.34.123:80 default; server_name _; rewrite ^/(.*)$ http://site.ru/$1 permanent; } |
Здесь говорится о том, что если идет обращение в ip-адресу через 80-ый порт, то необходимо делать permanent redirect на site.ru.
Однако техподдержка не рекомендовала мне так поступать со словами: «Более корректно будет настроить HTTP-сервер таким образом, чтобы он просто закрывал соединение, если к нему обращаются по адресу, который не указан явным образом в конфигурации HTTP-сервера, это наиболее надёжный, простой, безопасный и наименее требовательный к ресурсам сервера вариант. Через некоторое время страницы, которые будут недоступны, скорее всего, будут выкинуты из индекса поисковых систем.»
Следующий совет был такой: «Когда потребуется просто закрывать соединение вместо перенаправления, то укажите вместо строки 'rewrite ^/(.*)$ http://site.ru/$1 permanent;' такую строку 'return 444;'. Затем выполните: 'invoke-rc.d nginx reload'».
Вдруг это кому поможет.
Примеры редиректов в самых распространенных случаях
Редирект для домена www.site.ru на site.ru
server { listen 80; server_name www.site.ru; rewrite ^ http://site.ru$request_uri? permanent; } |
Редирект для домена с site.ru на www.site.ru
server { listen 80; server_name site.ru; rewrite ^ http://www.site.ru$request_uri? permanent; } |
Редирект с адреса http://site.ru/index.php на http://site.ru/
location = /index.php { if ($request_uri = /index.php) { rewrite ^ http://$host? permanent;#301 redirect } fastcgi_pass unix:/tmp/fastcgi.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } |
Вот как-то так. Я в настройках конфигов для nginx не силен, всегда обхожусь настройками апача, так что, если у вас появились какие-то вопросы по nginx, то я вряд ли смогу вам помочь...
Как проверить HTTP заголовки и статусы ответа сервера
Я хотел в этом разделе описать различные сервисы и плагины для проверки ответа сервера, но понимаю, что данный пост уже настолько большой по объему, что придется ограничиться просто ссылками на расширения для браузеров Chrome и Firefox.
Дополнение HttpFox для Firefox
HttpFox (вот ссылка на аддон) — это мой любимый инструмент отслеживания http-заголовков. HttpFox построчно показывает ход загрузки страницы, что позволяет отслеживать, например, цепочки редиректов и вообще порядок и скорость загрузки страницы. Если вы пользуетесь Мозиллой, то однозначно рекомендую.
Расширение HTTP Headers для Chrome
Сам я не пользуюсь расширением HTTP Headers (вот ссылка на него), но интернеты мне посоветовали обратить внимание именно на него. Если у вас есть варианты получше, пожалуйста, отпишитесь в комментариях.
На этом я завершаю свой ужасно длинный и нудный пост, друзья.
Спасибо, что дочитали его до конца, я надеюсь, он оказался для вас реально полезным.
Комментируйте, задавайте вопросы, рассказывайте о своих интересных ситуациях. До связи!
Не работает у меня вышеописанная .htaccess
А вот эта работает:
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www.domain.ru$ [NC]
RewriteRule ^(.*)$ http://domain.ru/$1 [R=301,L]
Не надо наговаривать на нормальный код, все прекрасно работает!
АлаичЪ, старый ты пирдун, я про свой хостинг написал.
Что вообще значит наговаривать?
А у меня на одном из хостингов не работает и я использую вышепредложенную констрюкцию. Возьми на заметку, кстати, пригодится для склейки www.
Мне на заметку не надо, я прекрасно знаю все эти способы :) Но в данном посте не стояло цели написать "100 и 1 способ склеить зеркала", я выбрал самый простой вариант и указал его. Если будут еще возникать подобные проблемы, я укажу на данный альтернативный способ в посте.
Спасибо за замечание.
Здравствуйте! Необходима помощь :( Скажу сразу, что я не профессионал, так получилось, что по моему незнанию при переносе сайта на новый сервер, я просто удалила весь старый контент и заново создала все статьи. Человек, который помог с сайтом, редирект тоже не предусмотрел и не посоветовал.
Теперь ситуация такая, что в поисковиках сайт практически выпал (жду когда проиндексируется как новый, переехали 5 августа), либо находятся еще битые ссылки с ошибкой 404!
Все на что меня хватило это настроить редирект на основной сайт www, и вчера на основные ссылки, которые все еще появляются в поисковиках сделала вот такого рода записи
RewriteEngine On
RewriteCond %{HTTP_HOST} ^afishko.kz$ [NC]
Redirect 301 /index.php/cinemas http://www.afishko.kz/index.php
Но ведь я не могу тысячи ссылок вручную в .htaccess добавить... Чтение постов помогает, но ввиду того, что я этим никогда не занималась боюсь напартачить и сделать только хуже... Подскажите скрипт, который бы осуществлял редирект со всех старых страниц на новый сайт, а некоторые популярные статьи я бы напрямую переадресовала на аналогичные новые (тоже не получилось, как видите в скрипте только index.php, полностью ссылка не работала ) Со ссылками такого вида вообще не знаю что делать http://www.afishko.kz/index.php?Itemid=105&id=69&option=com_content&view=article/
Буду очень благодарна за помощь!
Не существует никаких скриптов, которые бы делали редиректы, каждый сайт индивидуален, тут только прибегать к помощи специалистов конкретно для вашего сайта. Увы...
Вы помочь могли бы? Вписала уже редирект на кучу отдельных ссылок. Гугл никак не проиндексирует мою карту, две недели прошло, в итоге в поиске сайта вообще нет :( И все это последствия "переезда". Переадресация просто необходима, плюс дополнительные меры по поисковой оптимизации. Не могли бы вы заняться сайтом и на каких условиях? Буду благодарна получить ответ на почту.
RewriteCond %{QUERY_STRING} ^post=(.+)$
RewriteRule (.*) $1? [R=301,L]
данный редирект не работает на сайте под ДЛЕ.
и вообще нигде не работает, что делать?
Попробуй такой вот вариант:
Отпишись после проверки обязательно :)
На ДЛЕ сайте редиректит отлично) пасип. но вот на друпальном сайте нет.
http://help.kreditmedia.ru/srochnaya-pomoshch-v-poluchenii-kredita&post=17434801_4060 ->
http://help.kreditmedia.ru/usr/local/www/kreditmedia.ru/www/srochnaya-pomoshch-v-poluchenii-kredita
Прочитай-ка вот этот пункт: "И последний пример — разбор частой ошибки с адресом от корня сервера".
Да, не все еще прочитал, сейчас все в норме, спасибо!
АлаичЪ, здравствуй!
Если на сайте имеют место незначительные дубли текста (именно текста, а не целых страниц) — стоит волноваться?
Это связано с категоризацией материалов — краткое описание идет на несколько страниц + на главную...
Может что-то посоветуешь, а то все жадные — делиться не хотят инфой.
Заранее спасибо,
Роман
Волноваться не стоит, это типичная ситуация.
Спасибо за это ))
RewriteCond %{REQUEST_URI} ^(.*)\&post=
RewriteRule ^(.*)\&post=(.*)$ $1 [R=301,L]
Замечательный пост, спасибо!
Как раз на днях занимался редактированием клиентского сайта, пришлось объединить 3 статьи в одну, в итоге 2 новости удалены, сделал с них 301 редирект на объединенную статью. Редиректит, но на конце добавляет "?newsid=9&seourl=waterfall&seocat=vodostochnye-sistemy" — наверное благодаря всяким ДЛЕшным примочкам в стандартном файле .htaccess. Подскажите, как поправить, пожалуйста.
Значит где-то накосячил, раз при редиректе добавляется кавычка на конце, проверь свои правки.
Вообще чтобы убрать кавычку, можно заюзать такой редирект:
В смысле кавычка? Это я в кавычках написал то, что добавляется к урлу страницы, на которую редиректит.
Вот так она выглядит
http://site.com/vodostochnye-sistemy/7-hunter-plastics.html?newsid=9&seourl=waterfall&seocat=vodostochnye-sistemy
А в .htaccess к стандартному ДЛЕшному я добавлял только редирект с www и index.php.
Перепроверился — в стандартный .htaccess добавил лишь строчку
Redirect 301 /vodostochnye-sistemy/9-waterfall.html http://site.com/vodostochnye-sistemy/7-hunter-plastics.html
И снова та же ерунда :( ДЛЕ 9.7 — АлаичЪ, сделай его!
Хах =) А я думал кавычка добавляется =) Не надо было в кавычки брать строку, было бы понятнее...
Ну да ладно, сделай вот так:
И будет тебе счастье!
Хех, теперь со всех страниц редиректит на главную — добавлял в начало файла после редиректа с www.
Не может такого быть, только если у тебя НЕ ЧПУ. Данный код обрезает все параметры и редиректит на url без параметров. А так как НЕ ЧПУ url'ы построены именно на параметрах, то конечно будет редирект, но для ЧПУ url'ов все должно быть нормально.
Настройки ЧПУ http://clip2net.com/s/2LSOV скрин
Сайт подписан в профиле, вот пройди по ссылкам — везде редирект!
Убираю код — и все норм.
Да, подозреваю, что это из-за того, что параметры не успевают передаться скрипту, как их перехватывает mod_rewrite и отбрасывает. Перенеси строки кода из начала в конец файла.
Перенес — не помогло. Спасибо, что возился со мной, не буду больше отнимать время.
Если вдруг появится решение моей проблем — буду очень рад увидеть его в комментах, буду следить.
Так, до обсуждения НЕ стояло "Обрабатывать неверные URL ЧПУ" (на скрине уже стоит "Да")
В общем, теперь такой байды нету
http://site.com/vodostochnye-sistemy/7-hunter-plastics.html?newsid=9&seourl=waterfall&seocat=vodostochnye-sistemy
Редиректит на нормальный адрес. Ах, этот ДЛЕ :)
Еще раз спасибо!
Рад, что все решилось :) Обращайся, если что!
Алаичъ, огромный Вам респект за этот материал. Я поднимал вопрос про дубли с параметром & на форуме, вы обещали, вы сделали... Здесь вы наглядно показали как делать 301-й. Вы дали частный случай для ссылок из вконтакте. Пока я с такими ссылками не сталкивался, но вот на днях обнаружил дубль главной страницы такого рода:
http://site.ru/&sa=U&ei=AsguT72dLdHLtAaZ0tyVDQ&ved=0CCwQFjAIOFo&usg=AFQjCNFwbE9i0bqrQUGJLoDh6xyVd1nhxg
Не знаю, откуда робот узнал о таком адресе, но факт остаётся фактом. И этот дубль находится в выдаче гугл. Я ваш пример переделал, я заменил "&post=" на "&" проверил, редирект работает на главную. Я правильно сделал?
Раньше подобного рода дубли я удалял в панели вебмастера, на время это решало проблему, но они плодились снова и снова. Надеюсь, что сейчас такая проблема отпадёт совсем. Ещё раз ОГРОМНОЕ ВАМ СПАСИБО... Вы решили такую проблему, которая не давала мне нормально жить, спать и даже на баб тяжело вставал (шутка конечно).
У меня тоже были подобного рода дубли, откуда они берутся я уже не помню, но зато решение знаю :)
Так, как сделал ты — не правильно, хоть и работает. Нельзя оставлять только один знак амперсанда & как условие, т.к. перезапись может применяться для других адресов, где редирект не нужен. Короче, код лучше сделать таким образом:
У меня в связи с этим возник ещё небольшой вопросик...В роботсе есть запись Disallow: /& Её оставить? Или нужно убрать? И работает ли такая комбинация вообще?
И немного не в тему... Гугл проиндексировал карту сайта (xml) и она отображается в результатах поиска.Её нужно закрыть от индексации? Как-то стрёмно.Развейте мои страхи.Чтобы вы сделали в такой ситуации?
Запись из robots.txt убери, иначе поисковики редиректы не обработают. На карту сайта не обращай внимания, ничего в этом криминального нет.
Алаичъ спасибо за пост!
А меня интересует вопрос! где-то читал что вы напишите пост о том как убрать (http://site.ru/?abrakadabra)
у меня на любой страницы такая проблема!
Читай выше...Просто поменяй "&post=" на "?" в редиректе.Сам редирект в статье пр.вконтакте...
Евгений, твой случай не сработает :)
Я обновил немного пост, добавил еще несколько кейсов с типичными ситуациями. И решение данной проблемы как раз под заголовком "Избавляемся от параметров или меток в адресе".
Серьезный труд. Отличная статья. Всё самое необходимое собрано и отсортировано. Спасибо!
Сделал как в примерах. Почти все битые ссылки исправил. Кроме старых адресов сервисов, которые были на сайте. Можете помочь?
Старые адреса страниц сервисов имеют вид:
http://site.ru/index.php?part=text-name
http://site.ru/index.php?part=customer
Новые адреса имеют вид:
http://site.ru/services/generate-name-text.html
http://site.ru/services/customer-byudzhet.html
Страниц таких 7. Хотел через эту конструкцию для каждой страницы сделать:
Redirect 301 /index.php\?part=text-name http://site.ru/services/generate-name-text.html
но не фурычит
Конечно не фурычит, потому что это параметры =)
План действий таков:
Все остальное по аналогии, сам разберешься :)
Да. Теперь все фурычит. Благодарю.
А зачем вопросительный знак после html? ?
Так надо — такой ответ устроит? :) Это необходимо, чтобы избавиться от параметров.
А вы сами пробовали вот такой вот вариант использовать?
Redirect 301 /page-name1.html http://site.ru/page-name2.html
Redirect permanent /page-name1.html http://site.ru/page-name2.html
RedirectPermanent /page-name1.html http://site.ru/page-name2.html
Или просто добавили для наглядности как и в других подобных статьях. Дело в том, что когда я менял структуру одного из своих сайтов, то столкнулся с проблемой, которую не мог решить. Пробовал именно такой путь. Для динамических страниц, да ещё и с ЧПУ он не подходит. На статических не тестировал
Этот вариант подходит для одиночных страниц и не динамических. Под динамическими тут понимаются страницы с параметрами, разумеется, а страницы с ЧПУ аналогичны статическим.
Раз не получилось, значит неправильно что-то делал...
Как раз таки при таком редиректе с ЧПУ на новую страницу дополнительно передаются значения GET параметров. Зря я не сделал скриншоты результатов. Если будет время покажу, что выходит
Добрый день :) Мой комментарий будет малоинформативен, т.к. не содержит вопроса но я просто хочу поблагодарить :) Спасибо вам за статью — очень подробно все разжевано, и куча примеров реальных кейсов — я настолько разжеванной инфы по редиректам еще нигде не видел.
Прекрасная развёрнутая статья, спасибо.
Скажите, а может ли на разных серверах htaccess обрабатыватся по разному?
Сейчас с этим столкнулся. От www и index.php/page избавиться удалось, но остались дубли типа page/index.php, плюс слэш. Т.е. страницы одинаково открываются со слешем и без, и с index.php на конце и без него.
Код:
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_URI} (.*/[^/.]+)($|\?)
RewriteRule .* %1/ [R=301,L]
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.php\ HTTP/
RewriteRule ^index\.php$ http://www.site.ru/ [R=301,L]
########## Begin — Joomla! core SEF Section
#
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !^/index.php
RewriteCond %{REQUEST_URI} (/|\.php|\.html|\.htm|\.feed|\.pdf|\.raw|/[^.]*)$ [NC]
RewriteRule (.*) index.php
RewriteRule .* — [E=HTTP_AUTHORIZATION:%{HTTP:Authorization},L]
Есть насущный вопрос. Ссылочное передается при 301 редиректе? В Яндексе? Гугле?
по идее должно, для того он и придуман. Сейчас вот 3-й месяц с яшей бьюсь, чтобы сайты склеил и ссылки подцепил к новому домену.
Да, ссылочное передается, когда происходит склейка страниц. И в Яндексе и в Гугле, главное чтобы был 301 редирект, а не 302.
Тут дело такое. Есть дубль с IP адреса от сервера. Сайт находится на отдельном ВПС. Есть в Вашем посте как сделать редирект для nginx. Но у меня в связи со спецификой сайта пришлось его отключить, по другому никак не получится. Как и где можно прописать редирект в apache ? Только я начинающий. Есле можно поподробнее. Или каким способом можно сделать такой редирект еще?
Мне на хостинге помогли сделать такую заглушку.
http://skrinshot.ru/files2/15651189447661706157813402257387.jpg
Допустимо ли так делать или все же надо было делать редирект? Ведь возможно тот дубль уже успел попасть за пару недель в индекс поисковиков. Или они там быстро отвалятся.
Что такое zaglushka.site? Если речь про поле псевдоним, то это делается, чтобы сайт был доступен при вводе адреса как с www, так и без www. Редирект делать надо как обычно.
Вы уж извините меня чайника полного, но я ж и спрашивал как имеено делается такой редирект. И то что для Вас считается сделать как обычно, для меня непонятно совсем. Мне нужен редирект с ссылки с IP адресом сайта на мой сайт. Редирект с IP адреса сервера в движке не пропишешь. Его надо прописывать где то на самом сервере. Вот я и спрашивал где и как? Вы же написали , что очень хорошо разбираетесь в Apache, а мне именно там и надо все прописать и настроить.
С этим вопросом вам лучше к хостеру обратиться, оно надежнее будет.
Ситуация такова. Создал сайт с фильмами, сделал категории по жанрам. Те фильмы которые выйдут в прокат к примеру через месяц я добавляю в категорию "трейлеры" потом когда фильм выйдет в прокат я меняю категорию на "мелодрамы" при этом меняется адрес страницы. для перенаправления на новую страницу используется 301. Как на такое отреагируют ПСы?
Все нормально, так и надо делать.
Вот у меня 3 зеркала
a) site.ru
b) site.com
c) сайт.рф
Подскажите пожалуйста как поставить с доменов b и c редиректы на домен a?
RewriteRule ^(.*) index\.php$ $1 [R=301,L]
с этим редиректом происходит как раз все наооборот
Здравствуйте, АлаичЪ! очень нужна Ваша помощь. Нужен редирект на ссылки с параметрами. Перепробовал уже кучу вариантов — пока что ни один не помог.
Как можно убрать дубли в страницах Joomla такого вида:
sayt.ru/?start=5
sayt.ru/?start=5/
sayt.ru/categoriya?start=5
sayt.ru/categoriya?start=5/
Как видите по ссылкам Выше – дубли со слешем получаются.
P.S. Стоит Joomla 2.5, сторонние компоненты не использую.
Заранее спасибо за ответ!
А вот так попробуй:
Добавлять после RewriteEngine On
Кстати, на счет редиректа с index.php через htaccess — вариант не катит, т.к. ломает последующие конструкции построения ЧПУ-ссылок для других модулей или категорий новостей. Вот так заработало:
PS как тут в комментах использовать спец.коды?
Вариант был приведен для примера чтобы показать проблему с путем от корня сервера.
Да, твой вариант в комментарии верный, он работает.
PS Все комменты я оформляю вручную, если это необходимо.
У меня такой случай. Есть нормальные страницы, скажем site.ru/category/85-nazvanie.html (как вы поняли, стоит dle). Но в ошибках google webmasters выдает иногда такое site.ru/category/85-nazv, т.е. ссылка обрывается или обрезается.
В связи с этим вопрос, как можно сделать перенаправление на нормальный адрес?
И другой вопрос, куда перенаправлять страницы с удаленным тегами?
Для DLE надо активировать настройку в админке "Обрабатывать неверные URL ЧПУ". Теги можно на главную редиректить.
В принципе я так и думал, что так ответишь, но в админке все активировано, но ошибки есть.
Главное, чтобы редирект срабатывал, а ошибки со временем пропадут.
Редирект как раз и не срабатывает, открывается страница с ошибкой.
Для меня некоторые вопросы достаточно сложны. Но вот 404 ошибку заменить на 301 редирект — это отличная идея. Спасибо за идею.
Отличная статья, только вот читается тяжело. Слишком уж много информации. Кстати, не получилось сделать редирект через php, пришлось делать с помощью .htaccess
Всем привет !!! Есть старые страницы сайта. Например одна из них: http://www.site.ru/Institute/?242 — как сделать редирект на новую? . не черта из за этого знака ? вопрос не получается!
У меня проблема со знаком вопроса в урл. то есть если урл содержит вопросительный знак site.com/index.php?asdf
то в .htaccess не могу переадресовать. Как с этим быть?
Статья отличная — спасибо! Очень удобно, когда все необходимое собрано в одном месте. У меня такой вопрос... при переклейке доменов можно ли просто на хостинге в панели управления поставить редирект со старого домена на новый? или еще что-то для этого потребуется дополнительно прописать?
Не знаю, технология не важна, важен результат. Как проверить ответ сервера, я писал в конце поста, вот перейдите по старому домену и если произойдет 301-редирект на новый домен — значит все окей, можно спать спокойно!
У меня ничего не получилось , как я не старался , вопрос что я сделал не так ? когда все делал правильно.
Здравствуйте, Александр.
Есть следующая ситауция.
Главная страница сайта ввиду специфики доступна по двум адресам:
http://www.site.ru/
http://www.site.ru/catalog/
При переходе на http://site.ru/catalog/stranica/ происходит редирект на http://www.site.ru/stranica/ и при этом появляется 404 ошибка.
А нужно, чтобы происходил редирект на http://www.site.ru/catalog/stranica/
Как это сделать, помогите, пожалуйста?
А при переходе на http://site.ru/ происходит редирект на http://www.site.ru/index.php и также появляется сообщение о 404-й ошибке.
Ну вот ввиду специфики сайта я не смогу помочь, причин данной проблемы может быть целая куча, но я же не могу их знать...
Подобная проблема.
#Redirect 301 /kupit-med-v-saratove/.html http://купить-мед.рф/
После этого осуществляется переход не на купить-мед.рф/, а на www.купить-мед.рф/
joomla3
Может кто знает решение этой проблемы???
Спасибо за пост, у меня наконец получилось сделать редирект. Пока все работает как часики, очень благодарен!
Приветствую АлаичЪ. тут в хабре прочитал (http://habrahabr.ru/post/172999/) что есть проблема с точкой в конце доменного имени.
domain.zone. или domain.zone./
решение которое написано в хабре не помогает, можешь написать решение, как сделать редирект?
Интересная статья! АлаичЪ, у меня такая проблема, я заметил, что сайт отображается по любому поддомену, то есть, если ввести поддомен.site.ru (вместо поддомен можно вписать любое слово), то переходит на мой сайт... Что посоветуете в этой ситуации?
Посоветую обратиться к хостеру, чтобы исправили эту ошибку.
У меня VDS и я их ответ наперед знаю: "у нас нет доступа к Вашей системе, решайте сами"...
У меня точно такая же проблема, сайт открывается по разным поддоменам, сайт на VDS debian, хостер послал меня куда подальше, говорит мы не администрируем VDS сервера. Что делать не знаю, предполагаю что надо в apache закрыть соединения для любых неправильных имен сайта, но знаний в этой области отсутствуют, готов даже за отдельную оплату найти специалиста, если будут предложения пишите Slavik_1019@mail.ru.
Вопрос решил, включил в ISP автоподдомены и все ок, сайт загружается только по основному имени.
Добрый день!
В джумла 2.5 есть плагин "перенаправление". Его использовании является аналогом 301 редиректа? Склеятся ли страницы? Как узнать, подскажите? спасибо!
С Джумлой не работал, соответственно за плагин ничего сказать не могу. А как проверить ответ сервер, написано в конце поста.
сделал 301 редирект через .htaccess
при проверке старой страницы через плагин для Хрома, выдается статус 200, а не 301, это нормально???
Нет, не нормально, значит редирект на работает, раз выдает 200, должен отдавать 301.
вот запись в .htaccess:
Redirect 301 /svadebnoe-foto http://xn--80adk0baxm4a.xn--p1ai
ошибиться довольно сложно. Ввожу в плагин для Хрома адрес http://xn--80adk0baxm4a.xn--p1ai/svadebnoe-foto
получаю код 200, хотя редирект работает.
Ты меня не путай. Смотри цепочку перенаправления:
http://xn--80adk0baxm4a.xn--p1ai/svadebnoe-foto -> 301 редирект на страницу
http://xn--80adk0baxm4a.xn--p1ai -> эта страница отдает ответ 200 ОК
Все именно так и должно быть!
вот спасибо, мил-человек! успокоил! отлично!
Здравствуйте.
Подскажите пожалуйста, как можно реализовать следующий редирект. Есть адрес вида http://mydomain/master/otkrytki-i-podelki-svoimi-rukami/ — там при выводе показывается список постов из категории. Я создал страницу http://mydomain/otkrytki-i-podelki-svoimi-rukami.html на которой размещены вручную в нужном порядке ссылки на посты из категории. Мне нужно чтобы работал редирект с адреса категории на статическую страницу, при этом ссылки со статической страницы вида http://mydomain/master/otkrytki-i-podelki-svoimi-rukami/id-new-post.html нормально открывались.
(возможно, правильнее было сделать шаблон для сортировки постов по произвольным полям, но это для меня темный лес:( ).
Сайт на вордпрессе.
В посте же все доходчиво описано! Добавьте в .htaccess следующую запись:
Redirect 301 /master/otkrytki-i-podelki-svoimi-rukami/ http://mydomain/otkrytki-i-podelki-svoimi-rukami.html
Спасибо за ответ. Но в том то и дело, что так оно не работало. Возможно, это глюки виртуального сервера (денвер). Попробую на реальном хостинге это сделать на тестовых страницах.
Возможно и глюки Денвера — не забудь потом отписаться, когда попробуешь на реальном сайте.
Редирект работает, оказалось, после каждой правки .htaccess нужно перезапустить денвер.
Но возникла другая проблема. При открытии раздела http://mydomen/master/otkrytki-i-podelki-svoimi-rukami/ попадаем на мою нужную статью.
Если открывать любую статью из раздела http://mydomen/master/otkrytki-i-podelki-svoimi-rukami/, то при открытии попадаем на 404 страницу, поскольку адрес получается вот такой http://mydomen/otkrytki-i-podelki-svoimi-rukami.html239-pashalnye-otkrytki-svoimi-rukami.html вместо
Вот такой .htaccess в данный момент. Подскажите пожалуйста, как можно исправить ситуацию.
Redirect 301 /master/otkrytki-i-podelki-svoimi-rukami/ http://mydomen/otkrytki-i-podelki-svoimi-rukami.html
Options +FollowSymLinks
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www.mydomen$ [NC]
RewriteRule ^(.*)$ http://mydomen/$1 [R=301,L]
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ — [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
Тогда удали ту строку, а после RewriteEngine On добавь:
Получаю ошибку 500. Логи с причинами не нашел нигде, ни в каталоге с сайтом, ни в каталогах денвера.
Заработало. В последнем варианте код правильный. Спасибо большое.
Подскажите пожалуйста как правильно сделать редирект с site.ru/forum на site.ru/forum/
ибо обе странице в индексе что не есть хорошо. При этом в .htaccess
Добрый день!
Столкнулся с проблемой, что адреса типа http://сайт.ru/index.php?categoryID=ххх продублировались адресами http://сайт.ru/?categoryID=ххх. Подскажите, пожалуйста, как настроить 301 редирект, чтобы http://сайт.ru/?categoryID=ххх заменялись http://сайт.ru/index.php?categoryID=ххх.
Во всех примерах всегда избавляются от index.php, а тут обратная проблема =)
Спасибо!
Да, непростая ситуация :) Но решение есть!
Александр, огромное спасибо!
А можно сделать редирект на другую страницу если в url адрес написан кириллицей?
Например: sait.ru/какае_то_страница/ надо заменить на sait.ru/kakae_to_stranica/
Можно, возьми адрес страницы на кирилице, открой в браузере, скопируй из адресной строки содержимое и вставь в блокнот, получится длинный адрес с буквами, цифрами и процентами. Вот его и надо использовать, далее все по стандартной схеме.
добрый день как убрать эти страницы:
http://сайт.ru/http/www.youtube.com/embed/vnx_1Qs_j_w?feature=player_embed
http://сайт.ru/komedii/http/vk.com/video_ext.php?oid=-39354707&id=162738724&
http://сайт.ru/komedii/page/34/http/vk.com/video_ext.php?oid=-39354707&id=162
я прописал:
RewriteRule ^http/ [R=301,L]
но это убирает только первую строку а остальные не получается.
Убери ^ и все будет ок.
Здравствуйте. У меня проблема с редиректами для seo.
Нужно сделать так, чтобы при запросе сайт приводился к виду без www и убирался последний слеш, если он есть.
Я пишу так:
Если в первом редиректе не писать с www, то возникает зацикливание.
Я так понимаю, что если возникает первый случай, то должно сформироваться в виде с www и потом это должно отрезаться нижним редиректом. Если первое не возникает, то отрезается втрорым.
Но при запросе например http://site.ru/cena/ на выходе получается так http://site.ru/www.site.ru/cena.
Я так понимаю, что это связано с редиректом на свой хост и там где-то автоматически убирается и вставляется конструкция http://thissite, но врубиться никак не могу.
Помогите!
Мутная у тебя какая-то схема. Попробуй вот такой вариант, вместо своего:
Не работает. www убирается, а вот при запросе типа http://site.ru/cena/ возникает зацикливание.
Я не совсем понимаю как работает RewriteRule.
Там сравнивается весь URL типа http://site.ru/cena/ или только URI типа /cena/ ?
Непонятно что в переменной $1: http://site.ru/cena или /cena и потом где-то внутри добавляется http://site.ru/ (http://thissite по документации) и возникает зацикливание.
Но опять не понятно откуда зацикливание ведь на выходе все равно должно быть уже http://site.ru/cena и в следующий раз
RewriteCond %{REQUEST_URI} ^(.+)/$
не должен сработать.
Не знаю, тут надо на деле смотреть. Может быть там еще есть и php редиректы в движке, например. Откуда мне знать. В DLE, например, есть такое дело, когда нет на конце слеша, то происходит 301-редирект на страницу со слешем. И понятное дело, что пытаясь убрать этот слеш в htaccess, все улетит в цикл.
Ясно, буду смотреть в движке тогда (Амиро).
Большое спасибо за помощь.
Здравствуйте! Начитался всех этих кодов, и получилась каша, должного результата не добился...
Ситуация такая: сайт.ру/?страница — почему то такой урл часто вылазит и не отдает нужную "страницу", а вылазит главная с таким урлом. Необходимо прописать редирект на нормальный — сайт.ру/страница
Добрый День. Третий день бьюсь. Помогите сделать.
sate/index.php?ghghghg
Если делаю редирект на sate то остальные страницы типа sate/obzory.php?ghghghg перестают работать
Заведомо благодарен.
Попробуй такой вариант:
Спасибо за помощь. Но не работает.
Может еще чего попробывать.
Заведомо благодарен.
В таком случае просто закрой дубль в robots.txt и все.
Да в роботе закрыл давно. Но нет нет бывает проскакивает. Видимо ранее были ссылки на эти адреса, упоминания.
Спасибо за помощь.
Можно ли сделать редирект, если присутствуют любые категории в ссылках?
У меня категорий на сайте нет совсем, все ссылки только вида site.ru/link.html
Хочу все заходы на сайт по внешним ссылкам вроде:
site.ru/111111/link.html
site.ru/111111/яяя/222/link.html
site.ru/abcd/qwerty/999/666/link.html
ну и подобные, отправлять на главную страницу, как такое правило прописать?
У тебя прямо что не статья, то глава из книги. Супер.
Не часто такое бережное отношение к контенту встречается.
Больших усилий это стоит для меня. Но вот как раз ради подобных отзывов это и делается :)
А в чем разница указывать редирект как:
RewriteRule url nexturl или Redirect 301 url nexturl
Redirect 301 срабатывает только для одного определенного url, в то время как RewriteRule работает с регулярными выражениями, шаблонами.
Добрый день.
Большое спасибо за пост, особенно за способ обрезания хвостов типа ?lang=RU :)
А что можно сделать с хвостами типа ?wb_8723_session_id=e11uq0p6k40t95b8h2n8gim6g1 ? Почему-то для главной гугл находит 4 подобных довеска.
UPD: не рубятся хвосты lang=RU ни в какую =((
Содержание файла .htaccess:
SetEnv PHP_VER 5_TEST
SetEnv REGISTER_GLOBALS 0
RewriteEngine on # оглашаем, что хотим использовать mod_rewrite
RewriteCond %{HTTP_HOST} ^www.(.*) [NC]
RewriteRule ^/?(.*) http://%1/$1 [L,R=permanent]
RewriteBase /
RewriteRule index.php / [R=301,L]
RewriteCond %{QUERY_STRING} ^lang=RU$
RewriteRule ^(.*)\.php\?(.*)$ $1\.php [R=301,NC,L]
RewriteCond %{QUERY_STRING} ^lang=FR$
RewriteRule ^(.*)\.php\?(.*)$ $1\.php [R=301,NC,L]
Для lang=RU попробуйте:
А для ?wb_8723_session_id= и т.д. попробуйте:
Код для lang=RU приводит к ошибке: урл http://mysite.ru/pages/index.php?lang=RU принимает вид http://mysite.ru/homez.626/mysite/www/pages/index.php
Надо не забыть перед кодом ставить строку RewriteBase /
The webpage at http://mysite/pages/index.php?lang=RU has resulted in too many redirects.
Здравствуйте.
Я делаю редирект с сайт1 на сайт2.
RewriteEngine On
RewriteCond %{HTTP_HOST} ^(www\.)?сайт1\.ru$ [NC]
RewriteRule ^(.*)$ сайт2/$1 [L,R=301]
и нормально работает
НО мне нужно сделать редирект на сайт2/#ajax=name
я делаю редирект
RewriteEngine On
RewriteCond %{HTTP_HOST} ^(www\.)?сайт1\.ru$ [NC]
RewriteRule ^(.*)$ сайт2/#ajax=name$1 [L,R=301]
но он перенаправляется просто на сайт2/
Самостоятельно ссылка сайт2/#ajax=name работает
Что я делаю не правильно? Спасибо.
Вообще # обозначает якорь, или указатель. Не уверен, что возможно сделать редирект на такую конструкцию...
Подскажите пожалуйста. Сделал редирект с site.ru на www.site.ru. Все отлично работало. хочу отменить это и сделать обратный редирект, но кода редиректа в htaccess не осталось. Добавляю новый редирект и у меня все зацикливается. Как мне отменить самый первый редирект и сделать заново все? (файл htaccess удалял и заново писал. не помогает)
Вместе одного редиректа сделай другой. В настройках сайта заодно проверь, какое именно там главное зеркало указано. Все приведи к одному виду. После этого, если не поможет, перезагрузи сервер, почисти кеш браузера.
АлаичЪ привет.
делаю такой редирект.
Redirect 301 /page/forum-2/page/47-uslugi/pomoshch-v-litsenzirovanii/1105-remont-vooruzheniya-i-voennoj-tekhniki http://910960.ru/page/1105-remont-vooruzheniya-i-voennoj-tekhniki
Redirect 301 /page/forum-2/page/47-uslugi/pomoshch-v-litsenzirovanii/1165-uslugi-svyazi-po-peredache-dannykh-krome-golos-inf http://910960.ru/page/1165-uslugi-svyazi-po-peredache-dannykh-krome-golos-inf
но у меня таких страниц много. как сделать это для множетсва?
То есть надо убрать из url эту часть "/forum-2/page/47-uslugi/pomoshch-v-litsenzirovanii/" верно?
Так должно работать.
добрый день как избавится от этих страниц:
http://site.ru/seriali/page/34/300×250.swf
http://site.ru/dokumentalnii/page/23/300×250.swf
http://site.ru/komedia/300×250.swf
и
http://site.ru/players/uppod/uppod.swf
Это не страницы, это файлы. Закрыть их в robots.txt
Добрый день! Вопрос
есть адрес http://site.ru/svadebnaya-arka#sigProGalleria1f7739a664
хочу сделать редирект на http://site.ru/svadebnaya-arka
пишу
RewriteCond %{REQUEST_URI} ^(.*)\#sigProGalleria [NC]
RewriteRule ^(.*)\#sigProGalleria (.*)$ $1 [R=301,L]
не работает, подскажите где косячу?
# — это знак якоря, указателя места на странице. Это не дубль, поисковик якоря не учитывает, так что беспокоиться не стоит!
Здравствуйте ! Меня вопрос терзает один — можно всё вышенаписанное применить к dle 9.8 ?
А причем тут DLE? Это общая теория, никакой зависимости или привязки к CMS нет — так что подойдет для чего угодно!
Понятно, спасибо большое !
Спасибо за бесценный труд!
Но я не понял одного. Ведь пример с абракадаброй ― это всего лишь пример. Существует ли код редиректа, который перенаправляет на главную вне зависимости от того, что указано после знака вопроса (за исключением служебных страниц в DLE, например)? Идея ведь в том, чтобы исключить возможность индексации дублей главной страницы. А кроме пресловутой абракадабры это может быть что угодно. Например, http://site.ru/?parampampam или http://site.ru/?aramzazam
P.S. Вспомнил, что проблема эта была озвучена на одном из мастер-классов по SEO, с тех пор не могу никак выкинуть ее из головы.
Редирект в htaccess работает по шаблонам, то есть серверу надо как минимум дать знать, когда делать редирект, а когда нет. "Сделай мне что-нибудь" — такого сервер не понимает, ему нужны точные данные, коими и является название параметра после вопроса.
Все головные боли решаются использованием метатега canonical на сайте, это не будет делать редиректов, но не позволит "левым" страницам индексироваться.
Понял, спасибо.
А не подскажите, как установить атрибут rel="canonical" для главной страницы сайта?
Не подскажу, потому что для каждого сайта (cms) это индивидуально.
Речь идет о всеми нами любимом DLE.
Добавить в main.tpl
[aviable=main][page-count=1]<link rel="canonical" href="http://site.ru/" />[/page-count][/aviable]
Благодарю!
Не нашла, как через .htaccess убирать / на конце ссылки, поэтому вопрос:
в какое место и которого файла нужно вставлять данный php-код? :)
if ( ( $_SERVER['REQUEST_URI'], — 1, 1 ) == '/' ) {
$requested_url = rtrim ($requested_url, '/');
header ("HTTP/1.0 301 Moved Permanently");
header ("Location: $requested_url");
die ("Redirect");
}
Вам сюда — https://alaev.info/blog/post/2400
Если движок НЕ DLE — все равно туда?
Нет, не туда. Для каждого движка все индивидуально.
Много тут было вопросов про редиректы , но вот хотелось бы научится исправлять ситуацию с чпу (для DLE конечно).
Редирект ЧПУ
с 1->2
с 1->3
с 2->1
с 2->3
с 3->1
с 3->2
Включи в админке пункт "Обрабатывать неверные URL ЧПУ:" и не будет никаких проблем.
Алаичъ спасибо за пост!
Нужно перенести сайт на Wodpress.
Домен не изменился.
Обязательных страниц где-то 40, а все остальные на главную.
Как бы такое провернуть.
Заранее благодарен.
со страницы
http://site.com/catalog/c/50/
на
http://site.com/?product_cat=50
Привет!
Подскажите, как лучше сделать.
Ссылки в Sape на внутряки закупаются так: http://site.ru/index.php?categoryID=XXX/
То есть со слэшем на конце и с index.php
В выдаче часть запросов выходит как http://site.ru/?categoryID=XXX, другая часть как http://site.ru/index.php?categoryID=XXX/
Лучше поменять настройки в Sape или сделать редиректы:
http://site.ru -> http://site.ru/
http://site.ru/index.php -> http://site.ru/
Редиректы надо делать на основные страницы. Лучше всего привлечь программиста для разрешения этого вопроса, в данном случае htaccess не самый безопасный вариант.
Здравствуй АлаичЪ!
Нуждаюсь в твоей помощи так как сам могу немного на тупить или не то что-то сделать.
Проблема в том, что из-за спама в профилях на сайте пришлось их удалить. В результате чего появилось множество 404 ошибок (есть много ссылок с народа и других сайтов на данные профиля).
Как правильно сделать редирект с 404 ошибкой (для удаленных профилей) такого вида http://sait.ru/user/Artemms на главную.
А профили все на сайте удалил или какие-то остались? Вообще обычно профили закрыты от индексации в robots.txt, в этом случае не страшно, что там выдается 404 ошибка.
Не все, только лишь малую часть. Профили закрыты с помощью meta robots по твоим рекомендациям.
АлаичЪ, доброго времени суток! А вот вопрос: возможно ли сделать так, чтобы допустим с главной страницы старой версии сайта шла переадресация на новую версию сайта. Но вот при желании пользователя ознакомиться со старой версией сайта, он бы нажимал на ссылку на странице с новым сайтом и попадал на некоторые каталоги старого сайта (исключая главной страницы старого сайта, например, в каталог /news/, /glossary/ и т.п.), потому что там много интересных статей осталось, которые переносить в новый движок не хочется, а кто-то их ищет по старым ссылкам, и ссылок много уже накопилось за три года. Оба сайта на DLE. Старый лежит по адресу: http://64.psyfactoronline.com (сейчас тотально все перекидывается на новый, используя редирект в файле index.php); новая версия сайта находится в подкаталоге: http://64.psyfactoronline.com/new/ (он доступен для просмотра). Можете что либо посоветовать? Хотелось бы сохранить и новую, и старую версии сайта, и чтобы оба были доступны по своим адресам. Какое решение может быть в данному случае, если вообще возможно?.. С уважением, Олег.
Спасибо, наконец, сам разобрался, как лучше сделать. На самом деле, то, что я спрашивал, просто решается в самой панели администратора скрипта DLE: указывается каталог, из которого должен работать сайт. Вот и все, и скрипт автоматически вносит изменения в нужные файлы. Поэтому, всем спасибо, вопрос свой снимаю с повестки дня. Удачи!
Спасибо, что отписались о найденном решении, а то у меня все не доходили руки ответить на комментарии на блоге.
Подскажите как побороть такую ситуацию:
site.ru/index.php
должен слать на site.ru
но при этом site.ru/index.php?p=2
уже должен слать на site.ru/main.php?p=2
То-есть если есть index.php то шлем на корень, а если есть еще строка запроса то index.php меняем на main.php плюс строка запроса.
Я думаю, что вот как-то так должно это выглядеть:
Добрый день!
Сайт на html. Никак не могу сделать редирект с site.ru/index.html на site.ru
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www\.(.*) [NC]
RewriteRule ^(.*)$ http://%1/$1 [R=301,L]
RewriteRule ^(.*) index\.html$ $1 [R=301,L]
с www.site.ru на site.ru работает, а с index.html нет. Помогите, пожалуйста!
Вот так правильно будет:
Пробовал, и еще так пробовал:
Redirect 301 /index.html http://mywed74.ru
в обоих случаях выкидывает на http://site/
Что делать???
А что разве не надо заменить site на адрес своего сайта?! Ну это же элементарно...
уж изменил, поверьте! я ж написал в примере.
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.html\ HTTP/
RewriteRule ^index\.html$ http://mywed74.ru/ [R=301,L]
выкидывает на http://site/
Попробуй в другом браузере, или очисти кеш. Редиректы браузерами часто кешируются.
а ведь и точно! спасибо, работает!!!
Пытаюсь сделать простой редирект с страницы:
http://www.мойсайт.com/?lang=HE&id=55
на
http://www.мойсайт.com/?lang=HE&id=54
Но никак не получается. Знаю что структура УРЛ как таковая не идеальная, но на данном этапе заменить на человеческую не представляется возможным.
Будь добр подскажи как должно выглядеть правило для .htaccess
www. и index.php, уже сделал работает отлично, а с этими параметрами замучался.
И снова я со своими дурацкими вопросами :)
Можно ли снести содержание дефолтного .htaccess для DLE и вписать туда только те редиректы, которые реально нужны (www, index.php и т.д.)? Или сайты на DLE сразу требуют такого количества разных редиректов? о_О
Больше всего меня конечно смущает возможный конфликт строчек DirectoryIndex index.php и RewriteRule ^(.*) index\.php$ $1 [R=301,L]
Нет конечно! Ничего сновить нельзя ни в коем случае, не просто же так там все это написано.
Никакого конфликта между DirectoryIndex index.php и RewriteRule ^(.*) index\.php$ $1 [R=301,L] нет и быть не может.
Здравствуйте! Спасибо за статью, в закладки!)) У меня щас ситуация когда надо быстро сделать уйму редиректов со старой структуры на новую, времени разбираться нет, да и срегулярками и понимание mod_rewrite трудно, помогите!
Есть куча(больше 300) старых url типа
/Default.aspx?pageid=katanka
/Default.aspx?pageid=provoloka
...
и им соответствующие
/reference/sortovoy-prokat/katanka/
/sortament/sortovoy-prokat/provoloka/provolka-bp-1/
Как написать правильно 301 редирект с учётом того что, как я понял, redirect 301 и redirect permanent не работают с параметрами? Буду очень признателен!
В данном случае общего редиректа быть не может, так как новые страницы разные по структуре url и общий шаблон применить не получится. Так что или поштучно придется делать или искать общие группы и делать редиректы для них.
Вод общими группами я подразумеваю это:
/Default.aspx?pageid=katanka
/Default.aspx?pageid=provoloka
и соответственно:
/reference/sortovoy-prokat/katanka/
/reference/sortovoy-prokat/provoloka/
Вот так.
Статья отличная, оставлю закладку на блог.
Я вот тоже решил себе сделать ЧПУ адреса, но возникла проблема с передачей двух параметров. Вообщем есть ссылка такого вида:
/archive.php?year=2013 — она выводит записи по годам
/archive.php?year=2013&month=1 — выводит записи по указанному месяцу в году.
Я написал следующие директивы:
RewriteCond %{REQUEST_URI} ^year=(\d+)\&month=(\d)
RewriteRule ^archive/\.php\?$ archive/year/%1/month/%2/ [R=301,L]
RewriteRule ^archive/year/(\d+)/month/(\d)/? archive.php?year=$1&month=$2
Видимо где-то ошибся и работает только ссылка /archive/year/2013/, а ссылка /archive/year/2013/month/1 не работает.
Подскажите, пожалуйста, как мне правильно составить эти ЧПУ.
Может быть так, но я не уверен, как-то тут все мутно :)
Теперь наоборот работает ссылка /archive/year/2013/month/1/, а ссылка /archive/year/2013/ перестает работать.
Значит ниже добавь еще вот такие правила:
Может быть так, но я не уверен, как-то тут все мутно :)
Спасибо за помощь, буду что-нибудь пытаться сделать.
Уважаемый АлаичЪ. Подскажите следующую вещь:
у меня на сайте есть форма поиска. По нажатию кнопки поиска, в адресную строку браузера попадает следующее: site.ru/search.php?text=искомыйтекст
Подскажите как сделать чтобы в адресной строке адрес выглядел так: site.ru/search/text/искомыйтекст
АлаичЪ, помоги начинающему. У меня есть site.ru и пара доменов сайт.рф, которые в админке хостера стоят как синонимы к site.ru, стоит ли мне их склеивать с site.ru, если да, то как.
Заранее, спасибо!
Не знаю, стоит ли. Цель то какая у этих доменов была, когда их покупали?
Обычно, когда в панели управления хостера указываются зеркала/синонимы, то редиректы сами должны осуществляться средствами настроек сервера.
Здравствуйте, Александр.
Подскажите, пожалуйста что прописать, чтобы избавиться от дублей, которые получаются не знаю за счет чего, но странички имеют вот такой вид
сайт.ru////category//////salaty-iz-ovoschei
сайт.ru//category//salaty-iz-ovoschei
Лишних слешей может быть сколь угодно
Как настроить переадресацию со всех подобных страниц на единственно верную
посредством 301 редиректа?
Где-то у меня был шаблон для таких случаев, но что-то найти не могу. Вспомнил только про php-вариант, тут я его описывал http://talk.alaev.info/topic/544/ Может быть это натолкнет на мысль.
Спасибо огромное за статью!
Но я, все же, не могу справиться со своей задачей.
Заменить группу правил, которые работают:
RewriteCond %{QUERY_STRING} ^firma_kond=11$
RewriteRule ^split_systems_daikin.php /split_systems_daikin.php? [R=301,L]
RewriteCond %{QUERY_STRING} ^firma_kond=11$
RewriteRule ^cassette_conditioners_daikin.php /cassette_conditioners_daikin.php? [R=301,L]
RewriteCond %{QUERY_STRING} ^firma_kond=11$
RewriteRule ^channel_conditioners_daikin.php /channel_conditioners_daikin.php? [R=301,L]
на одно правило с использованием регулярных выражений:
RewriteCond %{QUERY_STRING} ^firma_kond=11$
RewriteRule ^(.*).php?(.*)$ /$1.php? [R=301,L]
Подскажите, пожалуйста, в чем ошибка.
Так должно сработать:
Здравствуйте, после перенаправления с одного на другой сайты, был правильный редирект, но ссылки почему то стали отображаться без сэша, например http://drupich.netmultfilmy/2725-maks. -priklyucheniya-nachinayutsya-vse-serii-skachat-besplatno.html?newsid=2725&seourl=maks. -priklyucheniya-nachinayutsya-vse-serii-skachat-besplatno&seocat=multfilmy
Здравствуйте! Замечательная статья! Очень полезный текст!!!!
Сейчас бьюсь над своим онлайн-магазином Unionstore.re
и очень хочу спросить и попросить совета — как эффективно поднять ранжирование именно в Гугл???
Индекс стабильный, а ранж очень низкий. Плаваем на 9-10-11 страницах. Это при том, что в Яндекс держимся в ТОП10
Ребята помогите пожалуйста!!! Повторяющееся метаописание... (движок dle 9.5)
http://mnntv.am/programs/2.../news_armenia/news_armenia/news_culture/news_sport/news_official/news_world/news_sport/
Как избавиться? Спасибо.
Совет один — обновиться до актуальной версии и включить в админе настройку исправления неверных url ЧПУ. И вообще, не в ту тему обращаетесь.
Здравствуйте!
Добавил в файл .htaccess строку
Redirect 301 /prices-order http://mysite.ru/prices-order/poryadok-priobreteniya
В результате чего при клике на ссылку http://mysite.ru/prices-order меня выкидывается на страницу:
http://mysite.ru/prices-order/poryadok-priobreteniya/poryadok-priobreteniya/poryadok-priobreteniya/poryadok-priobreteniya/poryadok-priobreteniya/...
Из-за чего происходит зацикливание адреса и как это устранить? (ниже приведен полностью файл .htaccess)
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ — [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
Redirect 301 /prices-order http://protectionprofile.ru/prices-order/poryadok-priobreteniya
PS Использую denwer.
Попробуйте так:
Зацикливание пропало, но редирект не происходит :/
Вопрос такой. Мне нужно из директории /ббб/ааа/ сделать редирект на /ббб/. Указанные в статье правила в чистом виде не помогли :) Подскажи пожалуйста как правильно!
Здравствуйте!
Я новичок, толко постигаю SEO.
Создал домен и 5 алиасов к нему 3 с www, два просто другие доменные имена, все обращаются ко одной папке на хостинге. По правилам SEO, нужно ли мне с них делать редирект 301 на основное имя? Мне нужно что бы поисковики цепляли все домены.
Я ничего не понял. Если необходимо, чтобы по всем доменам выдавалась одинаковая информация — значит надо делать редирект. Если цель создания нескольких доменов иная, то я не знаю.
Да нужно чтобы была одна и ты же информация.
1)Будут ли поисковики видеть алиасы?
2)Нужно ли создавать домены для других двух доменных имён?
Делайте редиректы со всех адресов на один основной и не будет никаких проблем. По поводу тонкостей обратитесь в хостерам, они помогут сделать это наиболее оптимально.
Спасибо.
Подскажите, пожалуйста, как реализовать редирект со всех страниц вида
"http://сайт.ру/info/страница" на "http://сайт.ру/blog/страница"
сайт переехал на другую цмс. конечные страницы все остались, только название категории было изменено.
спасибо.
Здравствуйте!
Очень полезная статья и благо я нашел в ней то, что собственно меня интересовало, но вот методики решения так и не увидел. Я хочу показать на примере свою проблему.
1. У меня сайт находится в поиске гугла по фразе на второй строчке по домену settips.com и на третьей строчке по IP-адресу. Это плохо? Ведь вроде сразу две строки занимаю.
2. Как все таки сделать переадресацию с IP-адреса на домен, если это конечно необходимо в моей ситуации?
3. Если у меня есть 3 зеркала, я должен сделать редирект в главном домене типа:
RewriteCond %{HTTP_HOST} ^site.com [OR]
RewriteCond %{HTTP_HOST} ^сайт.рф
RewriteRule ^(.*)$ http://site.ru/$1 [R=301,L]
или достаточно просто переадресаций с этих доменов отдельной. Кстати 2 домена привязаны к VPS, а один отдельно на хостинге
Заранее благодарю за рассмотрение моих проблем!
С ip адреса необходимо сделать редирект на основное зеркало. Именно такую ситуацию я описывал в посте.
Так же необходимо сделать редирект со всех зеркал на основной сайт. Со всеми этими проблемами лучше обратиться к хостеру, они сделаю все правильно на уровне сервера (особенно, что касается ip адреса).
Спасибо!
Здравствуйте!
Подскажите, пожалуйста, как сделать редирект.
czm-pyatigorsk.ru основной домен, narkomaniya-net.ru
www.narkomaniya-net.ru, net-alkogolizm.ru, www.net-alkogolizm.ru псевдонимы.
Попробовал сделать так: RewriteCond %{HTTP_HOST} ^narkomaniya-net.ru$ [OR]
RewriteCond %{HTTP_HOST} ^www.narkomaniya-net.ru$ [OR]
RewriteCond %{HTTP_HOST} ^net-alkogolizm.ru$ [OR]
RewriteCond %{HTTP_HOST} ^www.net-alkogolizm.ru$ [OR]
RewriteRule ^(.*)$ "http\:\/\/czm\-pyatigorsk\.ru $1"
Пишет: "циклическая ссылка"
Попробовал так: RewriteEngine On
RewriteCond %{HTTP_HOST} !^czm-pyatigorsk.ru$
RewriteRule ^(.*) http://czm-pyatigorsk.ru/$1 [R=301,L]
Вроде всё работает, но мне кажется это не правильно.
Подскажите, как правильно?
В этой строке RewriteCond %{HTTP_HOST} ^narkomaniya-net.ru$ [OR] забыли восклицательный знак поставить, оттого и цикл случается. Надо так: RewriteCond %{HTTP_HOST} !^narkomaniya-net.ru$ [OR]
А строку RewriteRule ^(.*)$ "http\:\/\/czm\-pyatigorsk\.ru $1" необходимо заменить на:
RewriteRule ^(.*)$ http://czm-pyatigorsk.ru/$1 [R=301,L]
После этого все будет окей!
Сделал так как вы подсказали:
RewriteCond %{HTTP_HOST} !^narkomaniya-net.ru$ [OR]
RewriteCond %{HTTP_HOST} !^www.narkomaniya-net.ru$ [OR]
RewriteCond %{HTTP_HOST} !^net-alkogolizm.ru$ [OR]
RewriteCond %{HTTP_HOST} !^www.net-alkogolizm.ru$ [OR]
RewriteRule ^(.*)$ http://czm-pyatigorsk.ru/$1 [R=301,L]
Безрезультатно. Не помогает.
А что не правильно в:
RewriteCond %{HTTP_HOST} !^czm-pyatigorsk.ru$
RewriteRule ^(.*) http://czm-pyatigorsk.ru/$1 [R=301,L]
RewriteCond %{HTTP_HOST} !^www.net-alkogolizm.ru$ [OR]
Здесь [OR] лишнее!
Убрал OR. То же самое:"На этой странице обнаружена циклическая переадресация"
Как будто заколдованная
Ты меня в заблуждение вводишь! Зачем отрицание-то во всех строках стоит? Вместо !^ надо просто ^
Ничего непонимаю. Опять что то не то?
RewriteEngine On
RewriteCond %{HTTP_HOST} !^narkomaniya-net.ru$ [OR]
RewriteCond %{HTTP_HOST} ^www.narkomaniya-net.ru$ [OR]
RewriteCond %{HTTP_HOST} ^net-alkogolizm.ru$ [OR]
RewriteCond %{HTTP_HOST} ^www.net-alkogolizm.ru$
RewriteRule ^(.*)$ http://czm-pyatigorsk.ru/$1 [R=301,L]
Помогите, плиз
Восклицательный знак в первой строке!
Ура!!! Получилось. Большое спасибо!
Здравствуй Александр. Очень полезная статья по редирект. У меня к тебе такой вопрос про редирект. Я на сайте сменил одну категорию: с "общая" на "строительство". И теперь Яндекс в поиске мне выбивает "общая", вместо "строительство", ну и естественно выбивает ошибку ( хотя на сайт заходит, но сразу в карту сайта). Да еще, я укоротил ссылку ЧПУ (/%postname%.html) убрал из нее категорию, чтоб сделать ссылки короче. В общем вот ссылка которая у меня отображается Яндексом как не рабочая: www.vsyakstroy.ru/общая/pokraska-potolkov-i-sten.html
А вот уже рабочая ссылка с новой категории "строительство" (идет уже без категории): www.vsyakstroy.ru/montazh-peregorodok-iz-gipsokartona.html.
В общем, Александр, мне нужна твоя помощь. Как мне осуществить смену категории через файл "htaccess"?
Я так понял, проблема уже без меня решилась?
Здравствуйте, АлаичЪ.
Подскажите, пожалуйста, как сделать такое:пользователь в поисковике набирает например "велосипед",ПС выдаёт ответ на нужные сайты там есть и мой,но ссылка не на index.php, а на index.php /viev_lesons.php?id=25.как реализовать чтоб при переходе из ПС по ссылке index.php /viev_lesons.php?id=25 попадали на на главную страницу сайта.
Помогите пожалуйста ,никто не даёт внятного ответа, очень советовали обратиться к Вам.
Вот так, наверное, должно сработать:
Еще раз спасибо за статью! Обращаюсь не в первый раз...
А как сделать редирект на мобильную версию сайта?
Все зависит от того, что надо получить в итоге, если это просто редирект с одного урл на другой — это одно, а если надо определить тип устройства и в зависимости от этого принять решение делать редирект или нет — то это уже другой разговор.
все мобильные перенаправить на мобильную версию сайта
Как я и сказал выше — это не такая и простая схема. Вам надо поискать специализированный материал по этой теме, а еще лучше какой-нибудь плагин для CMS своего сайта.
Очень много полезной информации, однозначно — в закладки.
У меня такой вопрос. Магазин переносится на другую cms, урлы все полностью меняются. Были типа /index.php?categoryID=34 теперь будут с чпу типа сайт/категория/товар.
Как правильно в этом случае сделать переадресацю всех старых страниц сайта на новые?
В этом случае лучше всего обратиться к программистам, не вручную же делать редиректы для всех страниц :)
ну я об этом и спрашиваю, потому что понимаю, что вручную сделать это не реально. Что именно должен делать программист? Что вообще делается в этих случаях?
Ну как что, программист он или не программист? В БД всегда есть четкое соответствие id и страницы. Каждому id всегда соответствует какая-то категория, а так же название, из чего и складывается ЧПУ адрес. Зная id мы знаем и ЧПУ адрес, который ему соответствует, знаем куда делать редирект.
а чем этот способ отличается от редиректа "вручную" ? ну найду я в БД id категории, товара и тд... и как его перенаправить? Так же каждый прописывать?
Или идите php учите или обратитесь к программисту. Вы меня не понимаете, вот и все...
Здравствуйте, АлаичЪ!
У меня похожий вопрос) Тоже есть сайт, с компонентом для создания ЧПУ. Надо обновить движок. В теории на новый сайт тоже можно поставить компонент для создания ЧПУ и присвоить статьям их же старые адреса. Сайт существует давно, странички проиндексированы, хотелось бы сохранить нажитое непосильным трудом)
Вопрос: будет ли это аналогом редиректа или решение плохое и надо искать другие?
Буду очень благодарна вам за помощь!
Я не понял немного суть проблемы, и вообще есть ли она?
Если вы собираетесь обновить движок, установить какой-то компонент, который приведет в итоге к тому, что url на новом движке будут в точности соответствовать прежним url, то никаких проблем нет в принципе.
Посмотрите пожалуйста. Правильно ли я сделал редирект на основной домен site.ru и с www на без него? Или надо местами поменять блоки? Т.е. сначала с www, а потом редирект на основной домен.
# редирект на основной домен
RewriteCond %{HTTP_HOST} ^site234.ru [OR]
RewriteCond %{HTTP_HOST} ^сайт.рф
RewriteRule ^(.*)$ http://site.ru/$1 [R=301,L]
# редирект с www на без него
RewriteCond %{HTTP_HOST} ^www\.(.*) [NC]
RewriteRule ^(.*)$ http://%1/$1 [R=301,L]
Так сделал. Думаю так правильней.
RewriteCond %{HTTP_HOST} ^site234.ru [OR]
RewriteCond %{HTTP_HOST} ^www.site234.ru [OR]
RewriteCond %{HTTP_HOST} ^сайт.рф [OR]
RewriteCond %{HTTP_HOST} ^www.сайт.рф [OR]
RewriteCond %{HTTP_HOST} ^www.site.ru
RewriteRule ^(.*)$ http://site.ru/$1 [R=301,L]
Да, так правильнее :)
Привет, АлаичЪ.
Нужна помощь. На сайте www.eko-termo.ru переношу структуру с поддоменов на основной домен. Нужно прописать правила переадресации, чтобы все страницы оттуда показывали на все новые страницы. Также есть еще несколько сайтов, на которых нужно прописать подобные правила.
Если сможешь помочь, конечно не бесплатно, напиши пожалуйста на мою почту. Буду благодарен.
АлаичЪ подскажи почему при редиректе добавляются лишние символы (именно для RewriteRule). Вот к примеру RewriteRule список-всех-категорий/сад http://domen.ru/%D1%81%D0%B0%D0%B4-%D0%BE%D0%B3%D0%BE%D1%80%D0%BE%D0%B4 [L,R=301], а при переходе на данную страницу domen.ru/список-всех-категорий/сад перенаправляет на http://domen.ru/%25D11%25D0%25B0%25D0%25B4-%25D0%25BE%25D0%25B3%25D0%25BE%25D10%25D0%25BE%25D0%25B4
Не знаю почему так, но знаю точно — использовать кириллицу в url — это плохой признак. Вот вам и результат.
Подскажите пожалуйста, нужно ли ставить редирект 301, если я переименовал страницу. При переходе по ссылке из ПС ошибка 404.
Да, обязательно нужно делать 301-редирект!
Добрый день!
Подскажите, пожалуйста, как в .htaccess сделать редиректы со страниц вида http://site.ru/shop/product/5058/328/genskaya-parfyumeriya/cacharel/cacharel-catchme-edp-gen.html на страницы вида http://site.ru/shop/details/5058/328.html?
Страниц около 1000, пробовал вот такое правило (написал сам, правда не работает):
RewriteRule ^shop/product/(.*)/(.*)/(.*)\.html$ http://aromashleyf.ru/shop/details/$1/$2.html [R=301,L]
А вот так попробуйте:
RewriteRule ^shop/product/([0-9]+)/([0-9]+)/(.*)\.html$ http://aromashleyf.ru/shop/details/$1/$2.html [R=301,L]
И добавляйте сразу после RewriteEngine On
Спасибо, обычно не отвечают в блогах. )
Уже сделал вот так:
RewriteRule ^shop/product/(.*)[/](.*)/genskaya-parfyumeriya/(.*)$ http://site.ru/shop/product/$2/$1.html [R=301,L]
Мне просто надо было поменять местами цифры (id категории и товара).
Только один вопрос, почему правило надо добавлять сразу после RewriteEngine On?
Я вроде добавил после редиректа с www на без www и работает или я неправильно сделал?
Советую изменить на мой вариант, он вернее и надежнее. Можно добавить код и после редиректа на основное зеркало, главное чтобы до основных правил ЧПУ добавлялось, а проще всего это объяснить как "сразу после RewriteEngine On" — точно никто не ошибется.
Понял, а чтобы в вашем варианте цифры поменять местами, тоже достаточно поменять местами $1 и $2?
RewriteRule ^shop/product/([0-9]+)/([0-9]+)/(.*)\.html$ http://aromashleyf.ru/shop/details/$2/$1.html [R=301,L]
Да.
Пожалуйста, помогите со склейкой зеркал! уже убилась их склеивать. Прописывала и так:
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www\.(.*) [NC]
RewriteRule ^(.*)$ http://%1/$1 [R=301,L]
и так:
RewriteEngine on
RewriteCond %{HTTP_HOST} ^www.eco-lodging\.ru$ [NC]
RewriteRule ^(.*)$ http://eco-lodging.ru/$1 [R=301,L]
и так:
RewriteEngine on
RewriteCond %{HTTP_HOST} !^eco-lodging.ru$
RewriteRule ^(.*) http://eco-lodging.ru/$1 [R=301,L]
и еще много как )) но нифига не склеивается ((( в чем может быть проблема? ссылка на мой htaccess: http://www.eco-lodging.ru/.htaccess.txt
уфф, вроде заработало каким-то чудесным образом! сорри, вопрос снят ))
а впрочем, буду рада,если вы подскажете, нужно ли избавляться от index.php в адресах страниц?
Рад, что все работает.
Да, избавиться от index.php стоит, если этот адрес дублирует главную страницу.
Подскажите, пожалуйста, как решить такую проблему.
Раньше адрес товара был:
http://www.mysite.ru/index.php?route=product/all&page=111 (или любой другой номер)
После того как включил SEO этот товар имеет адрес:
http://www.mysite.ru/tovar-name
Кроме того, после апгрейда опенкарт, если отключить SЕО, адрес несколько изменился на:
http://www.mysite.ru/index.php?route=product/product&product_id=111
Гугл по-прежнему где-то извне цепляет ссылку на самый первый урл и выдает страницу 404
Возможно ли в этом случае сделать перенаправление?
Заранее спасибо ))
Перенаправление удалось организовать вот таким образом:
RewriteCond %{QUERY_STRING} ^route=product/all&page=([0-9]+)$
RewriteRule ^index\.php$ /product&product_id=%1? [R=301,L]
Но, остался нерешенным еще один вопрос. Несмотря на то, что продукты имеют SEO названия, при таком перенаправлении они открываются не в виде http://www.mysite.ru/tovar-name, а в виде http://www.mysite.ru/product&product_id=
При любых других запросах, товар открывается с SEO адресом.
Не подскажете как заставить их открывать с SEO адресом и при этом перенаправлении?
Не вижу ничего общего в адресах http://www.mysite.ru/product&product_id= и http://www.mysite.ru/tovar-name поэтому htaccess тут будет бессилен. Если tovar-name это есть какой-то цифровой id то редиректы могут быть настроены средствами CMS или специального в ней модуля/доработки, где будет четкая привязка id из базы к ЧПУ названию.
Понятно, спасибо.
Возник еще один вопрос:
Поменял ЧПУ псевдоним товара с tovar_name на tovar-name, но простое перенаправление в .htaccess типа
Redirect 301 /tovar_name http://www.mysite.ru/tovar-name
почему-то не работает.
Не подскажете в чем может быть причина?
Сколько не мучил поисковики, не нашел ни одной темы, где бы освещался подобный вопрос.
Вот так попробуйте. Добавляйте после RewriteEngine On:
Разместил сразу после RewriteEngine On. Выдает 500 Internal Server Error
Окей, тогда так:
Если все равно продолжится 500 ошибка, то других вариантов не знаю :(
Работает, спасибо огромное! ))
У меня сайт созданный с помощью joomla и k2. У k2 бала проблема с ЧПУ при этом все адреса статей имели вид типа:
мойсайт.com/категория1/категория2/item/195-название статьи.html, где 195 — порядковый номер статьи. Я установила новый k2, где есть возможность удаления данного ужаса, но... Теперь у меня 2 страницы та, что была и мойсайт.com/категория1/категория2/название статьи.html. Мне нужно сделать редирект с первой страницы на другую какое правило посоветуете?
Меня даже устроит если останется мойсайт.com/категория1/категория2/195-название статьи.html. могу вернуть его в настройках, вот только все же хотелось бы убрать /item/. Если есть варианты без проблемного удаления простыми правилами подскажите пожалуйста.
То есть надо сделать из этого: мойсайт.com/категория1/категория2/item/195-название статьи.html
Вот такой вот вариант: мойсайт.com/категория1/категория2/название статьи.html
Верно? Тогда все просто. Добавляйте после RewriteEngine On:
спасибо большое. Вы все правильно поняли.
Помогите решить проблему! Поставил кнопку Like FB на Datalife Engine 10, при переходе с FB выдает Hacking Attempt. Ссылку FB создает таком виде:
http://www.site.ru/?fb_action_ids=580441798668253&fb_action_types=og.likes&fb_source=timeline_og&action_object_map={%22580441798668253%22%3A628190507225217}&action_type_map={%22580441798668253%22%3A%22og.likes%22}&action_ref_map=[]
Может можно через htaccess сделать редирект на www.site.ru ???
Решение вашей проблемы вот прямо здесь — #comment-17410
Здравствуйте! Подскажите пожалуйста, как сделать правильный редирект:
http://site.ru/index.php на http://site.ru
и одновременно чтобы работал редирект типа:
http://site.ru/index.php/kontakty... на http://site.ru/kontakty... (kontakty — не статичный адрес, изменяется)
А добавьте в .htaccess следующие строки:
В этом случае работает только первый вариант: с http://site.ru/index.php на http://site.ru
Если набрать адрес http://site.ru/index.php/kontakty то редирект происходит на http://site.ru
Во втором случае я как раз не пойму, как сделать редирект на http://site.ru/kontakty
Ошибочка в коде, забыл переменную добавить. Код в комментарии выше обновил, проверьте его.
Вот это уже работает! Супер! Спасибо большое!
Спасибо за статью, многое удачно внедрено. Но вот с одной траблой провозилась весь день и так не смогла одолеть, подскажите, пожалуйста. Пытаюсь сделать редирект со страниц вида:
http://site.com.ua/viewtopic.php?f=3&t=1718 на главную
http://site.com.ua
Перепробовала кучу вариантов, не сработало. Последняя из попыток была:
RewriteCond %{QUERY_STRING} ^f=([0-9]+)$
RewriteRule ^(.*)/viewtopic\.php $1 [R=301,L]
как побороть эту беду? заранее спасибо
Вы почти на правильном пути были, только вот знак $ в конце не надо было ставить. Т.е. вот так:
Если вдруг в конце после редиректа останутся параметры в url, замените $1 на $1? (т.е. добавить знак вопроса необходимо).
Большое спасибо за ответ, но не сработало :( попробовала с "?" и без. вот пациент (может это что-то прояснит): http://edinorog.com.ua/viewtopic.php?f=3&t=11451
Если поможет делу, могу остальной .htaccess показать
Ничего это не проясняет, там ошибка 500.
Ну да. Ошибка 500 как-то мешает отредиректить страницы с ней на главную? Она не влияет на редирект?
скажите, пожалуйста, как-то можно отредиректить эти страницы? или я что-то не так делаю? или что нужно сделать, чтоб заработал описанный Вами редирект? заранее спасибо
Добрый день!
Перенес сайт со старого движка на новый, но не могу настроить редирект, помогите пожалуйста. Беда какая-то.
Старая ссылка http://site.ru/catalog.php?idcat=&idcat2=48&idcat3=&idtvr=8099
Новая ссылка http://site.ru/vitek_wx-1101_winx_bloom_vafel_nitsa
Заранее спасибо, Георгий.
Только php. Обращайтесь к программистам, чтобы решили проблему, иначе никак.
Доброе утро!
Вы имеете ввиду нужно написать скрипт и .htaccess будет обращаться к нему?
Нет, не совсем. На php пишется набор правил и соответствий, а в .htaccess обозначаются правила составления ЧПУ адресов (это не редиректы).
Я просто уже сделал ЧПУ для всех ссылок, правда у меня их 8000.
И в Excel составил вот такое для всех ссылок, но не заработало. Хотя люди писали, что можно сделать через именно редирект при переносе движка.
RewriteCond %{REQUEST_URI} /catalog.php?idcat=&idcat2=48&idcat3=&idtvr=3000.8.001$
RewriteRule ^(.*)$ http://site.ru/elektronnaya_kniga_texet_tb-740hd_seryj [L,R=301]
RewriteCond %{REQUEST_URI} /catalog.php?idcat=&idcat2=48&idcat3=&idtvr=8000$
RewriteRule ^(.*)$ http://site.ru/vitek_wx-1101_winx_bloom_vafel_nitsa [L,R=301]
RewriteCond %{REQUEST_URI} /catalog.php?idcat=&idcat2=48&idcat3=&idtvr=8000.111$
RewriteRule ^(.*)$ http://site.ru/vitek_wx-1102_winx_flora_vafel_nitsa [L,R=301]
RewriteCond %{REQUEST_URI} /catalog.php?idcat=&idcat2=48&idcat3=&idtvr=8000.112$
RewriteRule ^(.*)$ http://site.ru/vitek_wx-1103_winx_stella_oreshnitsa [L,R=301]
RewriteCond %{REQUEST_URI} /catalog.php?idcat=&idcat2=48&idcat3=&idtvr=8000.4$
RewriteRule ^(.*)$ http://site.ru/vitek_wx-4051_winx_radiochasy [L,R=301]
И что, планируется все 8000 ссылок вручную прописывать таким образом? Если да — то вперед...
RewriteCond %{QUERY_STRING} 3000.8.001$ [NC]
RewriteRule (.*) http://site.ru/elektronnaya_kniga_texet_tb-740hd_seryj? [R=301,L]
и так еще 7999 раз =)
Я в Excel все запрограммировал, настроить нужно всего одну строку — это не долго.
Ща попробую)
Правда php уже заказал)))
Гениально, все работает)))
Еще раз здравствуйте!
Настроил все 8 000 редиректов таким образом, как Вы написали. Если нужен будет обработчик, готов поделиться.
Но если на сайт одновременно заходит несколько человек, то нагрузка на сайт возрастает и сайт уходит в 500 ошибку.
Может, кто сталкивался с такой проблемой?
Как настроить редирект такого кол-ва ссылок, чтобы не было такой нагрузки?
Заранее спасибо.
Добрый день. Очень полезная статья. Спасибо.
Есть вопрос насчет редиректа 301 vs. 302
Есть мультиязычный сайт с двумя языками, основной адрес site.com, языковые секции site.com/ru и site.com/en
При заходе на site.com система должна перенаправить на языковую секцию (когда /ru, когда /en) — перенаправляю с 302 кодом, нет ли здесь ошибки?
Еще раз спасибо
Просто стоит понимать, что 301 — это постоянный редирект, в итоге он приводит к склейке страниц, а 302 — это временный редирект, подразумевается, что однажды он перестанет существовать, при этом поисковики не склеят страницы и будут продолжать индексировать обе страницы, вес передаваться не будет.
Да, теорию я знаю. Но как лучше это делать именно с практической точки зрения
У меня на одном из сайтов при анализе страниц (пост) в сеопульте показывает "Код ответа: 200 (Redirect: 302)" в пояснениях рекомендуют использовать 301 редирект. Делал все по вашим примерам.
302 — временный редирект, веса не передает, потому и рекомендую использовать 301 редирект.
По моим рекомендациям нигде не сказано про 302 редирект, это даже из заголовка видно. Значит что-то не так сделали.
Ребята, помогите.
Сайт имел поддомен в виде инет-магазина и имел вид /shop И недавно данный поддомен перенесли на новый домен. Можно ли все ссылки которые ведут на /shop перекинуть на новый домен
старый сайт dachama.ru/shop новый домен dachamax-shop.ru
Как мне быть?
а) Прописать правила в .htaccess или конфиге nginx (в зависимости от того, какой используется веб сервер).
б) Положить по старому адресу скрипт, который разберет адрес и отправит пользователя по новому адресу (есть немного ньюансов)
есть такой файл .htaccess — я уже внес редирект 301 основного зеркала. а с переводом со старого сайта на новый не смог понять.
А какой скрипт нужно ставить?
1. Структура сайта не поменялась? Только изменился домен?
2. Это просто второй вариант, сделать все на чистом php. Первый вариант предпочтительней
Василий, сможете подсказать какой код редиректа 301 нужно прописать?
напишите в mail@indapublic.ru
А вот как поставить редирект на страницы с произвольными параметрами? Например site.ru/?qwerty123456 сервер отдает ответ HTTP/1.1 200 OK. Необходимо настроить ответ сервера HTTP/1.1 404 Not Found для подобных страниц. И вот вопрос! Как такое настроить?
Зависит от используемой платформы
В платформах не силен, но сайт дам — http://dieza-group.com.ua
Буду очень признателен за подсказку...
Платформа — в том смысле, самописное это или использование сторонней CMS.
Суть решения при обращении смотреть на параметры и отдавать 404. Через htaccess это не решить без описания всех корректных параметров
При смене движка сайта, как это сделать максимально безболезненно и незаметно для сео?
Что делать в случаях если:
1. Серьезно меняется структура сайта, внутренняя перелинковка, и т.п.
2. Ссылки на страницы в основном остаются прежними.
Чтобы там не менялось и не делалось, если меняются адреса, то должен стоять 301-редирект со старых адресов на новые. Как это сделать, подскажет и сделает только программист. Если будет редирект, то ничего страшного не случится о того, что будут стоять старые ссылки, если они будут перенаправлять на новые правильные адреса.
к примеру, если будет 1000 старых ссылок, нужно вручную настраивать 301-редирект на 1000 новых? Это отдельно прописывать для каждой старой ссылки новую ссылку? Очень долгий и трудоемкий процесс. Того стоит если сайт действительно очень круто продвинут.
Это не обязательно должно быть 1000 правил, если будет какая-то закономерность, которую можно описать регулярным выражением, то достаточно пары строк в .htaccess. Если нет, то всегда есть программист, который решит проблемы одной-двумя функциями на php.
сайт доступен по ip адресу как сделать редирект на домен? у меня свой vps.
пытался сделать с помощью такого правила
RewriteCond %{HTTP_HOST} ^X\.X\.X\.X$ [NC]
Rewriterule ^(.*)$ http://site.ru/$1 [R=301,L]
но ничего не помогает
RewriteCond %{HTTP_HOST} .
RewriteCond %{HTTP_HOST} !^site\.ru$
RewriteRule (.*) http://site.ru/$1 [R=301,L]
или
RewriteCond %{HTTP_HOST} ^site\.ru [OR]
RewriteCond %{HTTP_HOST} ^x\.x\.x\.x
RewriteRule (.*) http://www.site.ru/$1 [R=301,L]
где x.x.x.x ваш айпи (все это при условии что основное зеркало это www)
спасибо Василий, а если наоборот, основной сайт без www
RewriteCond %{HTTP_HOST} ^www\.site\.ru [OR]
RewriteCond %{HTTP_HOST} ^1\.2\.3\.4
RewriteRule (.*) http://site.ru/$1 [R=301,L]
1.2.3.4 — это ваш айпи, разумеется
огромное спасибо Василий, заработало.
Привет, данный код if (( $_SERVER['REQUEST_URI'], — 1, 1 ) == '/' ){
$requested_url = rtrim ($requested_url, '/');
header ("HTTP/1.0 301 Moved Permanently");
header ('Location: '.$requested_url.'');
die ("Redirect");
} выдает ошибку а именно символ , только не смог разобраться с каким именно, помоги пожалуйста
Доброй ночи! Помогите решить проблему. Нужно сделать редирект с http://molodayamamochka.ru/stati/itemlist/ на http://molodayamamochka.ru/stati.html
И еще немного не в тему, но все же...как закрыть от индексации в роботсе ссылки типа http://molodayamamochka.ru/stati/ya-mama/item/6-немного-о-грудном-вскармливании/6-немного-о-грудном-вскармливании.html или же такие же, но все латиницей, редирект на верные ссылки стоит
Заранее спасибо!
Та же проблема, если в курсе кто подскажите ПЛЗ!!!
Насчет первого — я так понимаю, редирект уже стоит?
Насчет второго — прописать Disallow в robots.txt
Да, в первом случае я просто прописала редирект со страницы на страницу, но остались дубли категорий такого вида
http://molodayamamochka.ru/stati/muzhchina-i-zhenshchina.html?format=html
http://molodayamamochka.ru/stati.html?format=html
что делать с этим хвостом, не знаю, пробовала прописывать разные условия редиректа, не помогло...
Может вы подскажете?
а в роботсе уже все настроила, спасибо)
Напишите мне письмо на mail@indapublic.ru
Подскажите программиста для написания PHP редиректа
Напишите на mail@indapublic.ru
Здравствуйте! Прекрасная статья)
Мой вопрос в следующем, есть страница :
http://www.noutservice.ru/remont-noutbukov.html — это правильная страница, но фишка в том, что если убрать ".html" и в конце поставить "/" , т.е. http://www.noutservice.ru/remont-noutbukov/ страница открывается та же самая.
Подскажите пожалуйста как мне избежать эту проблему, как сделать так, чтобы при обращении http://www.noutservice.ru/remont-noutbukov/ , перенаправление шло на http://www.noutservice.ru/remont-noutbukov.html
Перекопал все форумы, весь интернет и пока к сожалению не нашел ответа. Надеюсь на вашу помощь.
С Уважением, Евгений.
CMS?
CMS joomla
Попробуйте
Redirect 301 /remont-noutbukov http://www.noutservice.ru/remont-noutbukov.html [L]
Наверное, возможно это решить в самой CMS, но я в ней не силен
У меня при вставке
RewriteCond %{HTTP_HOST} ^www\.(.*) [NC]
RewriteRule ^(.*)$ http://%1/$1 [R=301,L]
Браузеры пишут, что происходит бесконечное перенаправление. Кто-нибудь знает в чем может быть проблема?
RewriteCond %{HTTP_HOST} ^www\.site\.ru [OR]
RewriteCond %{HTTP_HOST} ^1\.2\.3\.4
RewriteRule (.*) http://site.ru/$1 [R=301,L]
1.2.3.4 это ваш айпи (либо уберите строку если она вам не нужна)
Подскажите, как сделать исключения для некоторых страниц старого сайта, с которого идет переадресация на новый?
В .htaccess я прописал:
Redirect 301 /index.html https://sites.google.com/site/skapatity/
Теперь вводя адрес прежнего сайта http://school5.apatity.ru переадресация происходит, но мне нужно, чтобы открывался архив новостей старого сайта: http://school5.apatity.ru/news/ и еще некоторые разделы.
Можно ли добавить исключения в .htaccess?
Пропишите правило выше редиректа
Правило — это еще одна строка Redirect или что-то иное?
Правило для обработки url типа http://school5.apatity.ru/news/ и других должно стоять выше чем правило редиректа. Как только сервер встретит правило, которое сработает, он прекратит выполнение (при наличии нужных флагов). Таким образом, вам не нужны исключения в .htaccess
Почему только правильные сеошники? Да потому, что неправильные хуй забили на сайт клиента и, что вполне вероятно, даже не заходя на сайт, стали закупать ссылки – увы, это не редкость.
Порвало, ради этого и написал комментарий...
Доброго времени суток. Не поможете разобраться с проблемкой? Имеем сервер nginx. Необходимо в rewrite передать параметры GET-запроса. То есть например настроить редирект с
http://example.com/index.php?a=bar
на
http://example.ru/index.php?a=bar .
Именно с использованием index.php в строке запроса. Если не использовать index.php например http://example.com/?a=bar то реврайт срабатывает. Вторые сутки можно сказать не сплю. Перерыл весь инет. Перелопатил доки по nginx. Никаких сдвигов. ЧПУ реврайтятся как и положено, а вот с параметрами беда.
Очень буду признателен за помощь.
server {
listen 80;
server_name example.com
rewrite ^/(.*)$ http://example.ru/$1 permanent;
}
Василий, спасибо огромное. Работает. А я в сторону $args копал, а оно оказывается все намного проще))
Зашел сюда, чтобы вникнуть в Redirect 301, зачитался, спасибо за инфо. Но у меня такой вопрос: "Сколько htaccess файлов должно быть на сайте?" Обьясню почему спрашиваю: стал разбираться что у меня на сайте понаделали веб-мастера, раньше их не проверял, а доверял — теперь жалею об этой ошибке.
у меня на сайте куча htaccess файлов:
мойсайт.ру — htaccess
мойсайт/новости.ру — свой htaccess
мойсайт/форум.ру -свой htaccess, у админки форума еще свой. Сколько их должно быть? или как роботс.тхт должен быть только один в корне сайта?
В каждой директории сайта может быть свой .htaccess, его же используют не только для того чтобы делать редиректы.
Абсолютно нормальная структура
Прописан на сайте редирект главной страницы на раздел "Новости".
В чем разница между 1-ым и 2-ым правилом? Они оба нужны? Мне кажется они одно и тоже делают, хотелось бы кокое-то из них стереть, или я не прав?
RewriteCond %{HTTP_HOST} (www.)?site.ru [NC]
RewriteRule ^$ http://www.site.ru/news/ [L]
RewriteCond %{HTTP_HOST} (www.)?site.ru [NC]
RewriteRule ^ru[/]{0,1}$ http://www.site.ru/news/ [L]
Я не знаю, для чего последние две строчки, это уже какие-то особенности вашего сайта.
Просто редирект с главной на папку делается одной строкой:
В моем варианте стоит 301-редирект, можно использовать временный 302-редирект, просто заменив соответствующую цифру.
А как отредактировать файл .htaccess так, чтобы параметры URL yandex, openstat и adwords «не резались»
список переменных utm_source, _openstat=, from=, gclid=
Исходный .htaccess
Заранее благодарю!
Ничего не будет само резаться, если целенаправленно это не резать. Так что смотрите свой код, где отрезаются параметры и убирайте его. Или используйте условия:
Здравствуйте. А каким образом можно делать автоматический редирект при изменении адреса поста на новую страницу? Например было alaev.info/2012/страница1/, а стало alaev.info/2012/страница2/ или была страница alaev.info/2012/страница1/, а при изменении года стала alaev.info/2013/страница1/ и выскакивает 404 ошибка на предыдущей странице. Плагины не хочется использовать. Искал способы сделать через htaccess, но не нашел...
Автоматически через htaccess это никак не сделать. Используйте плагины.
Функция, убирающая конечный слеш из url:
Вот такая вот простейшая функция, которая смотрит, есть ли в запрошенном адресе страницы слеш на конце, и если он есть, то слеш обрезается и происходит 301-редирект на адрес без слеша. А наоборот поставить слеш, как?
Это делается проще, чем вы думаете :)
А если можно так сделать, но не по всему сайту, а на одной определенной странице? Т.е, указать страницу, и если посититель на нее попал, то перенаправить на страницу со /
А то у меня по сайту везде страницы со /, а эту страницу яшка проиндексировал без слеша, я уже и canonikal прописал, а изменений всё нет. А страничка у меня для поиска важная...
Ну значит обычный редирект прописать:
АлаичЪ
У меня не получилось настроить редирет:
RewriteRule ^page/name$ http://site.ru/page/name/ [R=301,L]
— этот тупо не работает.
if ( ( $_SERVER['REQUEST_URI'], - 1, 1 ) !== '/' ) {
header ("HTTP/1.0 301 Moved Permanently");
header ("Location: $requested_url/");
die ("Redirect");
}
— от этого сайт зависает.
И еще вопрос, у меня стоит редирект с без ввв на ввв, и еще с нескольких сайтов на тот же ввв, почему-то редиректит только главная страница, так и должно быть, этого достаточно для склейки? Я видел у некоторых любая страница срабатывает...
А может я Вам покажу .htaccess, Вы подскажите что не так? А заказать настройку редиректов нельзя?
С уважением.
Напишите мне на почту через FeedBack слева, попробуем разобраться.
Добрый день.
При переносе сайта на новый домен прописали
Options +FollowSymLinks
RewriteEngine on
RewriteRule (.*) http://www.NEWDOMEN.ru/$1 [R=301,L]
все работает, НО картинки не редиректят...
картинки на старом сайте отдают 200
подскажите плиз, как прописать редирект, что бы все картинки .jpg .png .gif
редиректили на главную нового домена
спасибо заранее!
Попробуйте:
При этом должны и картинки редиректиться. Если не редиректятся...тогда хз.
не редиректяца(
но все равно спасибо
Добрый день...Я на сайте не использую суффикс .html, в адресе страниц...И при удалении одного или нескольких символов из адреса страницы (вплоть до ID-номера)...Страница все равно открывается...Как сделать, что бы подставлялись недостающие символы...???
Это нельзя решить средствами htaccess, только php и только зная структуру движка. Обращайтесь к вашему программисту или разработчику CMS. Универсальных решений тут не бывает.
Добрый вечер...!!! Напротив, я думаю, что можно...Вы правильно поняли суть вопроса...????Берем адрес...К примеру...http://sait.ru/324-rabota-na-domy...Убираем последний символ...Открывается эта же страница, но без последнего символа...И так далее до ID номера...Если изменяешь Id...Отдается 404 страница...Я вижу на многих сайтах...При удалении символа и обновления страницы, символ добавляется...То есть адрес имеет исходный вид...
Если думаете напротив — флаг в руки.
А я еще раз повторю, что делается это не при помощи htaccess, а средствами php, путем сравнения текущего url страницы и url записанного в БД.
Александр, добрый день. Не могли бы помочь советом. Переделали сайт, поменялась структура url адресов. Как сделать редирект 301, к примеру, со страницы http://ippondesign.ru/?menu=comp на http://ippondesign.ru/kompaniya
Проблема в том, что старый адрес содержит знак вопроса и редирект из-за этого не работает. Там все адреса на старом сайте были такого вида.
Надо внимательнее читать, в посте не раз про параметры было сказано, а в комментариях еще большое.
Попробуйте следующий вариант:
Спасибо большое за помощь! Не дотюкал сам до такого :)
Здравствуйте! Вопрос избитый и даже читая Вашу статью в конец запутался :( Помогите, пожалуйста, советом.
Суть — есть трастовый ИМ в зоне .ru, купил домен с тем же названием в зоне .рф, необходимо склеить домен «сайт.рф» с основным доменом «www.site.ru».
На домене «сайт.рф» пока даже не стоит заглушка (стоит ли её ставить, пока ПС клеит эти домены или можно обойтись?).
А главное, как пошагово склеить эти 2 домена, что бы не потерять позиции, трафик и пузомерки на основном сайте www.site.ru (уточняю, домен с .рф просто необходимо сделать зеркалом).
Итак, обойтись директивой хост на «сайт.рф» с указанием главного зеркала и добавить сайт в панели вембмасетров с указанием зеркала или лучше комплексно (наверняка) — директива хост+добавление сайта в панели вм с указанием зеркала+редирект 301 в .htaccess?
Спасибо!
Достаточно просто разместить .htaccess файл для сайт.рф а внутри:
Все, больше ничего не надо делать.
Приветствую Вас!
Возникла проблема после модернизации сайта...
Пытаюсь убить неверные динамические ссылки типа: http://www.site.ru/ier_info.php?id=2
необходимо их редиректить на адреса типа: http://www.site.ru/kanji_2.html
Цифра 2 в ссылках — это динамически изменяемая информация... в обоих ссылках она одинаковая...
Сам адрес kanji_2.html появляется в результате генерации ЧПУ кодом:
RewriteRule ^kanji_ ([0-9]+).html$ /?do=dict_ier&id=$1 [L]
Пробовал разные варианты, но они почему то не работают...
Например пробовал:
RewriteRule ^kanji_ ([^/]*)\.html$ /ier_info.php?id=$1 [L]
Ожидаемого результата он не принес.
Хотелось бы настроить 301 редирект на адрес kanji_id.html
Может вы сможете помочь?
ЗЫ
С Наступающим Вас!!!
Всех благ и благополучия!!!
маска с ier_info должна быть сначала, а kanji после. то есть куски перепутаны местами (правильность маски не проверял)
К сожалению, если их поменять местами, то я получаю "Internal Server Error"...
Я не имел в виду просто менять местами конструкции. В RewriteRule сначала идет регулярное выражение на запрос (в вашем случае это ier_info.php) а затем адресат (в вашем случае это kanji).
То есть RewriteRule ^kanji_ ([^/]*)\.html$ /ier_info.php?id=$1 [L] редиректит с kanji на ier_info (при правильности регулярки, я ее не проверял)
Попробуйте такой вариант:
При таком коде я получаю ошибку: The requested URL /ier_info.php was not found on this server.
«Покрутил в руках» ваш код... В результате при таком написании все заработало корректно:
Слеши почему то давали такой эффект... странно...
Теперь запрос site.ru/ier_info.php?id=15 перенаправляет на site.ru/kanji_15.html
Может кому тоже пригодится...
Благодарю Вас за помощь!!!
Здравствуйте! Очень полезный материал, просто потрясающе. Думаю, уж Вы то мне точно поможете найти верное решение. Служба поддержки хостинга отослала в справочник, а там всё в общем... Мне срочно нужно сделать перенаправление из меню главной сайта (домен) на главную поддомена. Сайт на WP, поддомен нет. Директория поддомена где должна быть?- у меня не в папке publik (timeweb) домена, рядом. Что мне нужно поместить в файл htacces? Заранее благодарна, Людмила.
PS: Не удивляйтесь моей дремучести — только принялась за все эти дела. Но у Вас на форуме можно хорошо просветиться. СПАСИБО. И с НОВЫМ ГОДОМ!!!! МИРА И БЛАГОПОЛУЧИЯ хозяину форума и всем форумчанам!
Поддомен уже настроен? У timeweb поддомены настраиваются через директории и перенаправления
Вас не зря отправили в справочник, хотя могли бы и помочь, иначе, что они за поддержка. Но в общем, это настраивается у хостера где-то в панели, а не через файл htaccess. Так что ведите переписку с поддержкой, добейтесь помощи.
С поддоменом всё в порядке, но сделать перенаправление с меню главной домена на поддомен до сих пор не могу.
Здравствуйте, уважаемый АлаичЪ!
Столкнулся с проблемой настройки редиректа со старого домена http://tlt.poetree.ru/ на новый домен http://litoweb.ru/
1) Я открыл сайт на хостинге Vexy.ru и прикрепил к нему старый домен http://tlt.poetree.ru/.
2) Создал файл .htaccess со следующим содержанием:
RedirectPermanent / http://litoweb.ru
RewriteEngine O
RewriteCond %{HTTP_HOST} ^www.tlt.poetree.ru
RewriteRule (.*) http://litoweb.ru/$1 [R=301,L]
RewriteEngine On
>RewriteCond %{HTTP_HOST} ^tlt.poetree.ru
RewriteRule (.*) http://www.litoweb.ru/$1 [R=301,L]
Проблема в том, что в корневую папку на FTP файл не закачивается, выдавая ошибку 553 Can't open that file: Permission denied. Попробовал закачать в папку "media", где находится файл "index.html"... файл закачался, но редирект не работает...
Не могли бы вы помочь мне в этом деле? Готов заплатить, сколько скажете. Может быть нужно вообще какой-то другой хостинг для прикрепления домена, который будет направлять на новый домен? Правильно ли я написал код в .htaccess?
ВСЕХ ПОЗДРАВЛЯЮ С НАСТУПИВШИМ НОВЫМ 2014 ГОДОМ!!!
Во-первых, содержимое файла htaccess необходимо сделать следующим:
Во-вторых, размещать файл надо именно в корне и нигде больше. Возможно, что доступ запрещен по причине того, что права на системные файлы не предоставлены пользователю ftp. Таким образом, должно помочь использование файлового менеджера через панель хостера, а не через ftp-клиент. Заходите через web-интерфейс, удаляете старый htaccess (если он существует) и заливаете новый.
И дело в шляпе!
Я начал там закачивать файл, а на странице появилось сообщение:
Невозможно загрузить файл! Проверьте права доступа на сервере (по FTP измените CHMOD на 777)!
А какой хостинг лучше всего выбрать? Должен ли он поддерживать PHP?
Я допустил ошибку... Сейчас даже с хостинга Vexy.ru домен не открепляется целый день... На хостинге Vexy.ru какая-то лажа... там нельзя закачивать файлы в корневую папку...
Я хз, попробуйте хостинг sweb.ru
А там надо какой-нибудь сайт закачать потом в верхнюю директорию которого и закачать этот файл .htaccess?
Я перестал понимать о чем идет речь, так что задайте вопрос в службу поддержки, они помогут. Но htaccess там можно заливать точно, это я знаю.
Спасибо, АлаичЪ... ((
А не подскажете ответ на такую задачу http://купить-мед.рф/kupit-med-v-saratove.html и http://купить-мед.рф это одна и та же страница. redirect 301 не помогает, так как http://купить-мед.рф/kupit-med-v-saratove.html является категорией материалов и соответственно, при переадрессации 301 все материалы пропадают. Какое здесь должно быть решение???
Закройте от индексации неугодную страницу, раз редирект не подходит.
Доброго времени суток.
Нужно, что бы в адресе вида site.ru/index.php исчезло index.php
Прописываю все этого в .htaccess
Попробовал в принципе все описанное выше и во многих других местах. Браузеры выдает ошибку -На этой странице обнаружена циклическая переадресация.
Что не так? Как поправить?
Помогите пожалуйста
Как-то так можно попробовать прописать:
Не могу не как сделать ридерект с http://мойсайт.ру/?page=4 на http://мойсайт.ру подскажите, все перепробовал, ничего не получается
Ну так в посте же такой случай разбирается:
Здравствуйте АлаичЪ, очень полезная статья! Но решения своей проблемы я не смог найти, в ввиду специфичности.
Помогите пожалуйста:
Имеется ссылка такого вида: http://www.site.ru/?kart=%D0%9D+%D0%81&star=kl
Нужно сделать перенаправление в .htaccess с данной ссылки на http://www.site.ru/
Но есть условие, нужно чтобы при этом не перенаправлялись вот эти ссылки:
http://www.site.ru/start.html?kart=%D0%9D+%D0%81
http://www.site.ru/start.html?star=kl&kart=%D0%9D+%D0%81
http://www.site.ru/cold.html?kart=%D0%9D+%D0%81&star=kl
Перепробовал кучу вариантов ничего не выходит. В ссылке которую нужно перенаправить имеется "&" параметр, которого нет в ссылках рабочих, может как-то это использовать?
Два дня об стену бьюсь. :(
Здравствуйте! Подскажите, как перенаправить site.com/ru на site.com. Спасибо
Redirect 301 /ru http://site.com
Это уже проходил. Ответ сервера:
Неверное перенаправление на странице.
Firefox определил, что сервер перенаправляет запрос на этот адрес таким образом, что он никогда не завершится.
Значит у Вас циклический редирект. Проверяйте, какие еще правила работают и приводят к появлению закольцовки.
Здравствуйте!
Как повлияет на мой сайт редирект 301 на чужой сайт? То есть, на своём сайте я делаю редирект 301 с http://mysite.ru/link на http://xxxxxxx.com/?ref=xxxxx
Редирект делается с помощью плагина. И в нем ещё можно выбрать другие варианты редиректа: 302 и 307.
Лучше использовать в данном случае 302 редирект. По идее, если прокладка http://mysite.ru/link сделана только для редиректа и указывается там, где могла бы быть внешняя ссылка с реф.кодом, то страшного ничего не случится.
Привет, АлаичЪ!
Классная статья!
Нашел тут то, что давно искал — функция удаляющая кусок из url.
У меня проблема с формированием меню на сайте, а следовательно и статичных страниц: jommla3 делает мне site.ru/s/категория_товара/товар.html, где s-родительская категория для всех категорий и подкатегорий сайта.
Вот уже неделю не могу решить этот вопрос... Проиндексированные ссылки на старом движке с компонентом Sh404SEF все без родительской категории, а на новом сайте ставить сторонние компоненты вообще не хочу. И отсюда попытка удалить родительскую категорию через редирект всех 200+ страниц с site.ru/s/ на site.ru или попытка поправить формирование ссылок в самом движке. Вот как раз функция эта и пригодится, потому что с редиректом скорее всего будет проседание позиций в ПС — это крайний случай, если не выйдет хакнуть движок.
Подскажи как ее лучше применить? Тут в камментах никто не спрашивает — все с редиректом возятся.
Я думаю вставить ее в router.php компонента создающего меню или материалы. Пока попытки не успешные...
Сам код функции вставляю вот этот (он верен? я не силен в php):
if (strpos ($_SERVER['REQUEST_URI'], 'http://site.ru/s') !== false) {
$real_page_url = "http://site.ru".str_replace ( "/s", "", $_SERVER['REQUEST_URI'] );
header ("HTTP/1.1 301 Moved Permanently");
header ("Location: $real_page_url");
die ("Redirect");
}
Собственно вопрос куда вставить эту функцию, ну или вариант 301 редиректа с site.ru/s/ на site.ru?
Жду совета :) thx!
Здравствуйте. Помогите настроить редирект.
В наличии два сайта. Один на основном домене, другой на поддомене. На основном домене страница: http://site.ru/mercedes-sprinter-05-/9025-fonar-zadniy-levyy-440-1939l-ue-mercedes-sprinter-05- .html
на поддомене такая же страница: http://test.site.ru/product_10041.html
На основном домене будет находится другой сайт. Нужно чтобы по старым ссылкам основного домена посетители попадали на поддомен (на главную страницу поддомена. Страниц более 30000 и для каждой делать отдельный редирект ...)
Вставляю код в htaccess:
RewriteCond %{HTTP_HOST} ^site.ru$ [NC]
RewriteRule ^(.*)$ http://test.site.ru%{REQUEST_URI} [R=301,NC,L,QSA]
Перенаправление происходит, только как то коряво. Отправляет на страницу заглушку.
страница вида: http://test.site.ru/product.php?id_product=9025
а не непосредственно на: http://test.site.ru
В файле robots запретил индексацию всех страниц с основного домена.
Конечно можно было бы чисто тупо удалить все с основного домена, залить другой сайт и ждать когда само по себе все рассосется, пауки выкинут из поиска не существующие страницы, синдексируют новые, но ведь это ни есть хорошо как я понимаю.
Вопрос отпал. Не знаю что было. Переустановил двиг, прописал редирек для всех страниц.
Выдернул из гугл мастера и яндекса, и через Exel быстренько через функцию сцепить, слепил для каждой страницы редирект.
Нормально перекидывает теперь.
При включении перенаправления URL все работает, но только в доске объявлений adsmager не возможно добавить объявление, пишет Invalid Token. Такая же ситуация и с другим компонентом, тоже не отправляет сообщения. Как только отключаю перенаправление и все работает
Здравствуйте! Помогите разобраться, пожалуйста!
Нужно cделать редирект сайта, лежащем в поддомене: без www на с www (www.domain.site.ru — основной, ну, так решили).
site.ru редиректится на www.site.ru без проблем при помощи .htaccess
domain.site.ru выпадает в циклическую переадресацию при попытках редиректить его на www.domain.site.ru
В каком файле искать засаду? Где жестко прописан (не мной!!!) редирект на без www?
Оба сайта на джумла 1.7 — и доменный, и поддоменный.
Зы: уже который раз замечаю, что с поддоменами вылезают какие-то непонятки, чего не встречается на сайтах на доменах.
Заранее спасибо!
Прописывайте в .htaccess (который расположен на поддомене) следующее:
RewriteCond %{HTTP_HOST} ^www\.(.*) [NC]
RewriteRule ^(.*)$ http://www.%1/$1 [R=301,L]
Простите, я не понимаю данную запись.
Смысл? С www на www?
Если это не слишком нагло, Вы не могли бы прописать мне редирект с конкретным поддоменом (что-то я в синтаксисе вязну после кучи попыток):
реально sport.vitarad.ru
нужно www.sport.vitarad.ru
А может, это проделки хостера?
Заранее благодарю!
Ошибка в код затесалась, не добавил восклицательный знак :) Теперь код верный, можете пробовать.
А как настроить редирект в .htacсess с категории на стат. страницу в ДЛЕ?
Пробовал так:
Redirect 301 /cat1/ http://site.ru/stat1.html
На выходе получилось http://site.ru/stat1.html?do=cat&category=cat1
Лишний хвост "?do=cat&category=cat1" совсем не порадовал.
Что не так сделал?
Попробуй так:
Молодец, спасибо!
Теперь никаких хвостов.
Помогите пожалуйста со склейкой и редиретом, надо:
1. Сделать редирект на http://www.мойсайт.ком/ru/forum/
2. В ближайщее время программисты доделают работу на WordPress (находится в корне сайта) и ридирект с форума будет снят.
Одновременно надо склеить:
а) склеить без www с главным зеркалом http://www.мойсайт.ком/. Так же есть и другие модули как:
http://www.мойсайт.ком/ru/forum/
http://www.мойсайт.ком/ru/news/
б) склеить index.php с главным зеркалом, сейчас доступно по ссылке:
http://www.мойсайт.ком/ru/forum/index.php
http://www.мойсайт.ком/ru/forum/inde...splay.php?f=55
в) склеить со слешем на конце на без слаша.
у самого не получается, пробовал все варианты что здесь расписаны
заранее благодарствую.
Это вам лучше к программистам. Во-первых, они тоже знают, как это сделать, а во-вторых, некоторые редиректы не однозначны, чтобы из делать через htaccess, лучше через php делать.
порекомендовать кого-нибудь можете? небезвозмездно, конечно :)
Не могу, к сожалению. Вы же сами написали "В ближайщее время программисты доделают работу" — они и помогут, разве нет?
PS А так, всегда fl.ru в помощь!
Здравствуйте!
Подскажите пожалуйста с редиректом.
Нужно убрать раздел из url
т.е. что бы сайт.ру/меню/каталог/товар перенаправляло на сайт.ру/каталог/товар
и например сайт.ру/меню/контакты на сайт.ру/контакты
и так для всех страниц, т.е. везде нужно избавиться от /меню
К сожалению, не получается...
Это не может не работать. Добавлять надо сразу после RewriteEngine On и не забыть заменить menu на нужное.
Да я всё сделал, поменял структуру, удалил раздел menu, но при переходе по старой ссылке вместо редиректа на новую открывается такая страничка
http://сайт.ru/home/host******/сайт.ru/htdocs/www/katalog/tovar/ и пишет что страница не найдена
Значит надо добавить перед строкой редиректа такую строку: RewriteBase /
Приветствую. Большое СПС за статью.
Прошу проверить:
Требуется чтобы www.dles.ru/woodnews?id=3974 перенаправлялось на www.dles.ru/woodnews/?id=3974. Т.е. должен быть слеш между буквой "s" и знаком "?".
Я вставил:
RewriteEngine on
RewriteRule ^woodnews ([A-Za-z0-9_]+)/$ /woodnews$1/ [R=301,L]
Господа, попробовал вот такой вариант:
RewriteRule ^woodnews?id=(.*)$ woodnews/?id=$1 [R=301,L]
все равно не получается (видны обе страницы)
Добрый день! Поменяли cms сайта, и встал вопрос о склеивании ссылок которые уже емею вес в ПС, но ссылки такого характера
http://сайт.ru/?kresla-dlya-rukovoditelya,40
нужно направить на
http://сайт.ru/katalog/kresla-boss
Я так понимаю это параметры: знак ? и ,40 — Но пока не смекнул как правильно настроить редирект
Поможете, буду крайне благодарен!
Как-то так должно быть:
Большое тебе спасибо. Все работает!!!
Добрый день!
Спасибо за Вашу познавательную статью, есть 2 момента которые я не смог исправить на своем сайте
1) http://coolsochi.ru/kanalnye-konditsionery/daikin/kanalnyy-konditsioner-daikin-fdmqn25cxvryn25cxv/?_utl_t=tw — как избавиться от окончаний "?_utl_t=tw" ?
2) как сделать редирект со страниц всех товаров http://coolsochi.ru/kassetnye-konditsionery/daikin/kassetnyy-konditsioner-daikin-ffqn25cxvryn25cxv/reviews/ на страницу без "/reviews/" пример http://coolsochi.ru/kassetnye-konditsionery/daikin/kassetnyy-konditsioner-daikin-ffqn25cxvryn25cxv ?
Заранее спасибо!
Первый случай:
Второй случай:
Не первый не второй примеры не помогли.
Они не могут не помочь, тут не может быть вариантов. Напомню, что надо добавлять строки сразу после RewriteEngine On. Если и это не поможет, то причина не в неправильных правилах, которые я написал, а в чем-то другом (специфика движка, настройка сервера и т.д.)
Они уводят на страницы http://coolsochi.ru/home/v/vsesaiti/coolsochi/public_html/kanalnye-konditsionery/daikin/kanalnyy-konditsioner-daikin-fdmqn25cxvryn25cxv/ т.е. приписывается лишний путь home/v/vsesaiti/coolsochi/public_html/
Добавьте перед правилами строку RewriteBase /
Спасибо! Перед правилами это строкой выше?
PS Выдает ошибку (Internal Server Error), настройте пожалуйста, заплачу Вам.
Да, должно получиться:
Отлично все заработало!
Спасибо! рад буду отблагодарить...
Здравствуйте! Подскажите пожалуйста, как сделать редирект с
site.ru/component/users/?view=registration на site.ru/register
Вот так:
Спасибо! Работает! Супер!
Добрый день! Подскажите в чем может быть проблема. Сделали 301 редирект со страниц старого сайта на новый, сохраняя домен со старого сайта.
В результате — переход всех страниц выходит на Главную страницу, а не нужную.
Что делать))? Помогите!
Добрый день!
Я не сильный профи в редиректах, много искал в сети, но не нашел вот что:
есть сайт http://my-site.ru/ переадресация с http://www.my-site.ru/ на сайт http://my-site.ru/ проходит успешно, но!
страница сайта http://www.my-site.ru/любой_адрес переходит только на главную: http://my-site.ru/
а!!!
страницы сайта с двумя слешами после .ru http://www.my-site.ru/любой_адрес1/любой_адрес2 вообще выдает ошибку!
Мне админ сказал сто дело в джумле, вообще реально сделать нормальный редирект? Чтобы каждая страница с www....... переадресовывалась на страницу без www
Я не знаю, что вы там делали. Но описанный мной код:
Работает без сбоев и редиректит все правильно. Используйте его, а свой существующий редирект удалите.
Добрый день! Огромное спасибо за статью — очень информативная!
Не могли бы вы мне помочь с такой проблемой:
при переносе сайта с Юкоза на ДЛЕ урлы привел в такой же вид как и на Юкозе были, но только в конце добавилось .html — то есть был урл http://site.ru/news/3623—2014-2-10-3662 ( отсканирован ПС), а стал http://site.ru/news/3623—2014-2-10-3662.html где "3623—2014-2-10-3662" это сами новости.
Подскажите пожалуйста как сделать переадресацию со старых ссылок на новые?
После RewriteEngine On надо добавить:
Примного благодарен! Всё работает супер :)
ДОбрый день, буду благодарен если подскажете, что прописать в .htaccess или тыкнете где это выше...все прочитал, но не нашел аналогичного запроса
У меня есть страницы (их много) типа
http://syte.ru/schools/french/item/latelier9 — основная страница
дубль:
http://syte.ru/schools/french/item/latelier9?category_id=90
как сделать редирект на основную страницу, отрезав все начиная со знака ? — ?category_id=ХХ (ХХ разные цифры, дублей много)
а то Яндекс выкинул из поиска 1000 моих страниц (((
Читайте "Избавляемся от параметров или меток в адресе".
да я пробовал вариант из этого разделе
RewriteCond %{QUERY_STRING} ^?category_id=[NC]
RewriteRule (.*) $1? [R=301,L]
ничего не получилось, сайт выдает ошибку и не работает вообще
Потому что правильно вот так будет:
спасибо, что помогаете!
так тоже не работает, выкидывает на несуществующую страницу 404 http://syte.ru/home/c/cl105614/public_html/schools/french/item/latelier9
Добавьте перед этими двумя строками такую: RewriteBase /
все работает )))) Спасибо вам огромное!!!!
Привет АлаичЪ, подскажи как сделать, у меня сайт на DLE + в директории warcraft3 другая CMS, в этой другой CMS есть страница с героеми адреса: http://сайт/warcraft3/?hero=USYL где USYL id героя.
Я хочу гайды по героям сделать на DLE, что бы из той CMS переносило на DLE. Например при обращении: http://сайт/warcraft3/?hero=USYL переносило в http://сайт/раздел/новость.html
пробую так не выходит:
RewriteRule ^(.*)/warcraft3/?hero=USYL/$ http://сайт/раздел/новость.html [R=301,L]
Как-то так должно быть:
Работает, вставил в директорию warcraft, а не DLE. А если у меня много таких ссылок будет, так же писать?
Да, много ссылок — много правил.
RewriteRule ^hero=USYL$ http://site.ru/раздел/новость.html [L]
Так тоже работает, в чем отличие?
Мой вариант более правильный :)
Большое спасибо еще раз, за помощь, я бы может сам сделал, просто делал это в корне :)
Добрый день, еще один вопрос по редиректу: мне гугул сегодня прислал отчет о 100 ошибках 500
типа http://site.ru/es/directory-of-schools?task=callelement&format=raw&item_id=67&element=bf46ad97-759b-4f72-8dd6-1bb31df8536e
и http://site.ru/ru/directory-of-schools?task=callelement&format=raw&item_id=837&element=ce88c9eb-ac5c-4a0a-acba-c1c53b8fd063
Раздел directory-of-schools у меня отключен и вообще будет удален, дизайнер зачем-то сделала дубль существующей категории Schools.
Хочу настроить редирект, чтобы с подобных выше страниц просто выскакивала на страницу http://site.ru/schools и все без хвоста дальше, пока получилось только подменить directory-of-schools на schools+хвост ((((
Добрый день АлаичЪ! У меня два вопроса: подскажите пжл после использования редиректов стали такие url у несуществующих страниц пример: http://www.elimsband.ru/?do=static&page=kaver_band
а были такие: http://www.elimsband.ru/kaver_band.html и они не исчезли хотя я в htacces написал как вы рекомендовали
Redirect 301 /kaver_band.html http://elimsband.ru
Они сразу должны пропасть? Или нужно ждать индексации яндекса? Либо я не правильно делал редирект? Спасибо надеюсь на ответ.
Я не знаю, что вы делали и почему так все получилось.
Чтобы избавиться от странных адресов при редиректе помогает использование RewriteBase /
А при редиректе страница сразу должна исчезнуть или нужно ждать индексации яндекса? Плюс раньше не было таких URL и на обычные страницы они нормальные именно на эти что делал редирект. Если не сложно киньте ссылку где посмотреть можно по поводу RewriteBase /
Во избежание недоразумений, предлагаю все изменения откатить обратно до внесения правок. А то вероятно, что вы сделаете все только хуже не зная, как правильно делать и проверять результат.
Проблема такая у меня google проиндексировал страницу http://site.ru/?qwerty123456 естественно там выдается главная страница сайта хотел исправить ситуацию избавится от подобного вашим кодом
RewriteCond %{QUERY_STRING} ^utm_source= [NC]
RewriteRule (.*) $1? [R=301,L]
Но не сработало, сам полазив дошел только до следующего:
RewriteCond %{QUERY_STRING} ^([a-z]+)([0-9]+)$
RewriteRule (.*) $1? [R=301,L]
Оно работает но как вы понимаете не универсально, а ваша модель вроде универсальна но почему-то не работает...
Что значит универсально? Писать универсальные ридиректы не безопасно, надо решать конкретные проблемы.
Универсально это вот (.+) — покрывает любые символы.
У меня вылезла такая проблема в поисковой выдаче http://sua.com.ua/home/home/home/home?page=shop.browse&category_id=38&vmcchk=1 как подскажите пожалуйста как мне от этого избавится?
в файле .htaccess сейчас такой код
########## Begin — Joomla! core SEF Section
#
RewriteCond %{HTTP_HOST} ^www\.(.*) [NC]
RewriteRule ^(.*)$ http://%1/$1 [R=301,L]
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.php\ HTTP/
RewriteRule ^index\.php$ http://sua.com.ua/ [R=301,L]
RewriteRule ^magazine$ http://sua.com.ua/ [R=301,L]
RewriteRule ^index.php/(.*)$ /$1 [R=302,L]
RewriteCond %{REQUEST_URI} !^/index\.php
RewriteCond %{REQUEST_URI} (/[^.]*|\.(php|html?|feed|pdf|raw))$ [NC]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* index.php [L]
RewriteRule .* — [E=HTTP_AUTHORIZATION:%{HTTP:Authorization},L]
#
Добавьте перед указанными правилами строку RewriteBase /
добавил, только теперь перебрасывает на http://sua.com.ua/home/category/38-ustroystva-dlya-izgotovleniya-razbornih-modeley, а как можно убрать /home/ из url?
пробую таким способом RewriteRule ^home/(.*)$ /$1 [R=302,L], не получается выскакивает ошибка 404
Так тут дело уже не в редиректе, а в том, что движок такие страницы, которые вам надо не формирует, а точнее формирует по другим адресам, судя по всему. И тут необходимо саму систему построения ЧПУ в движке переделывать.
Здравствуйте, Скажите, правильна ли такая конструкция для редиректа с дубля главной страницы domain.ru/index.html на domain.ru? Установил на сайт — вроде пашет, но сомневаюсь, все ли правильно.
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.(php|html|htm)\ HTTP/
RewriteRule ^index.(php|html|htm)$ http://domain.com/ [R=301,L]
Да, вроде, все верно.
Подскажите пожалуйста где я натупил, на некоторых страницах выскочила .html, и не могу понять как теперь это убрать, пробовал уже разные варианты.
http://sonatamobel.com/matrasy/bm1548-detail.html, а если убрать, http://sonatamobel.com/matrasy/bm1548-detail то эт другая страница
вот что в .htaccess
RewriteBase /
RewriteCond %{HTTP_HOST} ^www\.(.*) [NC]
RewriteRule ^(.*)$ http://%1/$1 [R=301,L]
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.php\ HTTP/
RewriteRule ^index\.php$ http://sonatamobel.com/ [R=301,L]
RewriteRule ^index.php/(.*)$ /$1 [R=302,L]
RewriteRule ^home/(.*)$ /$1 [R=302,L]
RewriteCond %{REQUEST_URI} !^/index\.php
RewriteCond %{REQUEST_URI} (/[^.]*|\.(php|html?|feed|pdf|raw))$ [NC]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* index.php [L]
Redirect 301 /foto-krovati.html http://sonatamobel.com/krovati
Заранее благодарен!
Кусок файла мне ни о чем не говорит. Лучше скажите, что надо сделать то?
на некоторых страницах в поисковой выдаче выскочил .html, откуда он взялось не могу понять так как все ссылки без html
при добавлении к странице .html появляется дубль http://sonatamobel.com/tumby/tumba-bt107-detail.html (http://sonatamobel.com/tumby) http://sonatamobel.com/tumby/tumba-bt107-detail
вот еще пример
http://sonatamobel.com/tumby/tumba-bt109-detail.html (http://sonatamobel.com/tumby), http://sonatamobel.com/tumby/tumba-bt109-detail
Как мне поступить склеить все все эти страницы, или есть какой-то универсальный способ избавления от .html?
Ну вот как-то так должно быть в таком случае:
Спасибо, все работает.
Обнаружил в выдаче такую проблему http://sonatamobel.com/krovati/krovat-b229-detail/recommend?tmpl=component, это дубль страницы товара http://sonatamobel.com/krovati/krovat-b229-detail/ и такие дубли на все товары. Возможно написать правило склейки этих страниц?
что-то типа такого?
RewriteCond %{REQUEST_URI} !^/component/.*/$ [NC]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^.]+)$ /$1.html [R=301,L]
Добавить в .htaccess:
Все хорошо, спасибо. А не подскажешь, у меня есть еще одна проблема которую я не могу решить. Как убрать дубли такого плана?
http://sonatamobel.com/tumby
http://sonatamobel.com/tumby/item/bt517
http://sonatamobel.com/krovati
http://sonatamobel.com/krovati/item/b109
Я в ручную попробовал их поклеить, но это 100 строк, возможно написать ворожение?
Как часы, спасибо)
Помогите разобраться.
Редирект :
RewriteCond %{HTTP_HOST} ^www.сайт.me$ [NC]
RewriteRule ^(.*)$ http://сайт.me/$1 [R=301,L]
— работает отлично на главной странице, а вот на внутренних www не убирает. В чем проблемка может быть, и как ее исправить. Может где-то в папках есть еще один .htaccess, который мешает главному?
Sonet, разобрались? Исправили? У меня такая же проблема была. Я поставила аналогичный вашему редирект:
<IfModule mod_rewrite.c>
Options +FollowSymLinks
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} ^www\.(.*) [NC]
RewriteRule ^(.*)$ http://%1/$1 [R=301,L]
RewriteRule ^(.+)/$ /$1 [R=301,L]
</IfModule>
И тогда с главной с www перенаправляет на главную без www — отлично, то, что надо, а вот все внутренние страницы с www стали перенаправляться на главную без www, а надо, чтобы отдавались эти же страницы, но без www.
У меня такая проблема. Нужно склеить 20 категорий типа (kategory-pechi, kategory-bani) с 20 категориями типа (pechi, bani) То есть, у одного типа категорий есть приставка (category) и для них нужно сделать редирект на аналогичную категорию, только без приставки. Возможно ли это сделать одним действием?
Спасибо преогромное! Во всем разобрался, теперь все супер!
Доброй ночи!
Есть сайт, который собирает поисковый трафик.
Нужно, чтобы посетитель попадая на некоторые страницы сайта перенаправлялся на страницу другого сайта (или как вариант на страницу этого домена, на которой во фрейме будет страница другого домена). Самое главное, чтобы это никак не отразилось на продвижение в поисковиках этих страниц основного домена.
Подскажите, пожалуйста, как это лучше реализовать?
Заранее спасибо за помощь!
>>> как это лучше реализовать ... чтобы это никак не отразилось на продвижение в поисковиках этих страниц основного домена.
Никак!
Друзья подскажите как убрать лишние слеши после имени домена? Смотрю у многих на сайтах эта проблема существует или это не проблема?
Например http://www.домен/товар.html открывается и при таком исполнении http://www.домен////товар.html
У меня если один слеш поставить http://www.домен/ то все нормально он обрезается, а если написать вот так http://www.домен/// и так далее, то слэши не убераются.
Кто знает как это решить в файле .htaccess
Перерыл весь нет — много воды, а конкретного ответа нет.
Не все перерыли значит, раз этот пост на форуме остался без внимания — http://talk.alaev.info/topic/544/
Хотя там на примере DLE и не в htaccess, но можно указанный код применить, например, в файле index.php.
Здравствуйте, не могу сделать редирект, как не пишу не получается
Были ссылки вида
http://magazin.local/category/ЧПУ_категорий
стали
http://magazin.local/ЧПУ_категорий
нужно сделать редирект со старых на новые
пробовал:
RewriteCond %{QUERY_STRING} ^magazin\.local/category/$
RewriteRule ^magazin\.local/$ $1
результат:
http://magazin.local/aksessuary-dlya-kinoteatrov/?_route_=category/aksessuary-dlya-kinoteatrov/
пробовал:
RedirectMatch 301 magazin.local/category/(.*) magazin.local//$1
и
RedirectMatch 301 category/(.*) /$1
результат такой же.
подскажите пожалуйста как правильно сделать запись?
На хостинге сайта triz-krsk.ru прикреплен домен новаяпечь.рф
файлы последнего находятся в папке public_html/xn--80adk3afi1dybxa.xn--p1ai/
Проблема состоит в том, что при наборе в браузерной строке новаяпечь.рф выходит имя http://triz-krsk.ru/xn--80adk3afi1dybxa.xn--p1ai/
Хостер говорит, что надо в htaccess прописать правила перенаправления, а потом файлы настройки сайта.
Применил стандартные, но не помогло.
#RewriteCond %{HTTP_HOST} .
#RewriteCond %{HTTP_HOST} !^example-domain-please-change\.com [NC]
#RewriteRule (.*) http://example-domain-please-change.com/$1 [R=301,L]
Конечно не помогло, они же закомментированы. Знак решетки # означает комментарий. Уберите его во всех строках.
Буду премного благодарен, если подскажете как записать. Сейчас в htaccess записано:
RewriteEngine on
Options -Indexes
RewriteCond %{HTTP_HOST} .
RewriteCond %{HTTP_HOST} !^triz-krsk\.ru [NC]
RewriteRule (.*) http://triz-krsk.ru/$1 [R=301,L]
# The Friendly URLs part
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]
Замените то, что указали выше на это:
Заменил в htaccess, что лежит в папке public_html, результат при наборе в строке
1. сайт новаяпечь.рф — в браузерной строке как надо.
2. сайт triz-krsk.ru — в браузерной строке стал как новаяпечь.рф
файлы этого сайта находятся в папке public_html
В папке public_html/xn--80adk3afi1dybxa.xn--p1ai/ тоже есть свой htaccess :
Options -Indexes
Options +FollowSymlinks
RewriteEngine On
RewriteBase /
# The Friendly URLs part
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]
Может они конфликтуют?
Я вообще нихрена не понял. Что надо-то сделать?
Я понял, что надо сделать редирект с triz-krsk.ru на новаяпечь.рф. Если нет, то формулируйте вопрос корректно так, чтобы я его понял правильно.
Привет AлаичЪ, большой тебе риспект, что помогаешь нуждающимся!
Изложу суть яснее:
1. На хосте находятся 2 сайта triz-krsk.ru (файлы лежат в public_html) и к нему прикреплен домен новая печь.рф (файлы лежат в public_html/xn--80adk3afi1dybxa.xn--p1ai/)
2. Была проблема: при наборе "новаяпечь.рф" в строке браузера было http://triz-krsk.ru/xn--80adk3afi1dybxa.xn--p1ai/ Сайт triz-krsk.ru — отображался корректно.
3. Добавил в htaccess, который лежит в папке public_html, ваши рекомендации:
Options -Indexes
RewriteEngine on
RewriteCond %{HTTP_HOST} !^xn--80adk3afi1dybxa.xn--p1ai [NC]
RewriteRule (.*) http://xn--80adk3afi1dybxa.xn--p1ai/$1 [R=301,L]
# The Friendly URLs part
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]
Проблема исчезла, но теперь появилась новая проблема:
4. Сайт triz-krsk.ru редиректится на новаяпечь.рф
5. Надо, чтобы при наборе triz-krsk.ru он же и появился — в строке надо triz-krsk.ru
и при наборе новаяпечь.рф — в строке надо новаяпечь.рф (сейчас это есть).
Я не понимаю, что значит "к нему прикреплен домен". В моем понимании, это значит, что эти домены стали зеркалами, отображают одно и то же содержмое и должны быть склеены — то есть редиректиться к какому-то одному адресу.
Если же надо, чтобы по двум адресам отображался один и тот же сайт, но оба адреса были доступны, то надо убрать, то, что между строками # The Friendly URLs part и RewriteEngine on и все.