Redirect 301 – теория и практика редиректа, настройка и правила использования

301 редирект Привет, друзья. Сегодня хотелось бы обсудить очень заезженную, но всегда актуальную тему – это 301 Редирект (Permanent Redirect 301) – в seo-тусовке и без формальностей именно это подразумевается под словом «редирект». Технически это является ответом сервера на обращение к нему, этот ответ имеет код 301, обозначающий, что адрес обращения был изменен навсегда (moved permanently). В результате всех этих хитрых махинаций мы должны получить какой-то новый конечный адрес.

Я считаю, что вам не нужны эти технические аспекты, а потому хочу поговорить о прикладных вещах – когда и в каких ситуациях лучше использовать редирект, каким образом и при помощи каких команд можно настроить правила переадресации и т.д. А так же рассмотрим инструменты и сервисы, при помощи которых можно проверить правильность редиректов.

Еще я хочу поделиться случаями из моей практики, иногда попадаются такие, что и нарочно не придумаешь. Именно поэтому важно рассматривать такие ситуации, ведь можно никогда и не узнать о существующей проблеме со своим сайтом, а она будет мешать продвижению…

Так как пост вышел очень большим, то я решил сделать оглавление для вашего удобства:


Когда НЕОБХОДИМО делать 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 для преобразований в контексте каталога.
  • Метасимволы используются для задания групп символов или «меток» в шаблоне:
    • ^ — метка начала строки,
    • $ — метка конца строки,
    • ! – отрицание,
    • \ — экранирующий слеш, позволяет считать следующий за ним метасимвол обычным символом,
    • . – точка, обозначает любой символ, но только один,
    • () – группировка.
  • Модификаторы ставятся после обычных символов, метасимволов или их групп и расширяют возможности использования шаблонов:
    • ? — символ повторяется 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 (вот ссылка на него), но интернеты мне посоветовали обратить внимание именно на него. Если у вас есть варианты получше, пожалуйста, отпишитесь в комментариях.


На этом я завершаю свой ужасно длинный и нудный пост, друзья.
Спасибо, что дочитали его до конца, я надеюсь, он оказался для вас реально полезным.
Комментируйте, задавайте вопросы, рассказывайте о своих интересных ситуациях. До связи!

Ерунда и баянЪ!Зачет! Плюсую!
+32
Подписка на новые посты:

Профессиональный технический аудит и рекомендации по оптимизации вашего сайта.
Тот самый необходимый «фундамент» для успешного продвижения.

15 000 руб.

Комплексный подход к решению поставленных задач: достижение топ-10 и увеличение трафика на сайт. В стоимость уже включены полный технический аудит и оптимизация сайта.

25 000 руб.

У вас недостаточно знаний и нужны ответы на вопросы?
Интересует мнение эксперта или надо проверить подрядчика?
Вы задаете вопрос — я отвечаю!

5 000 руб./час

Проведу подробное исследование вашего сайта и основных конкурентов, опубликую материал на блоге для обсуждения и коллективного поиска новых идей.

50 000 руб.

Комментарии: 921 Написать комментарий
  1. Администратор (3 комм.)

    Не работает у меня вышеописанная .htaccess

    А вот эта работает:

    RewriteEngine On

    RewriteCond %{HTTP_HOST} ^www.domain.ru$ [NC]

    RewriteRule ^(.*)$ http://domain.ru/$1 [R=301,L]

    Ответить
    • АлаичЪ

      Не надо наговаривать на нормальный код, все прекрасно работает!

      Ответить
      • Администратор (3 комм.)

        АлаичЪ, старый ты пирдун, я про свой хостинг написал.

        Что вообще значит наговаривать?

        Ответить
        • Администратор (3 комм.)

          А у меня на одном из хостингов не работает и я использую вышепредложенную констрюкцию. Возьми на заметку, кстати, пригодится для склейки www.

          Ответить
          • АлаичЪ

            Мне на заметку не надо, я прекрасно знаю все эти способы :) Но в данном посте не стояло цели написать "100 и 1 способ склеить зеркала", я выбрал самый простой вариант и указал его. Если будут еще возникать подобные проблемы, я укажу на данный альтернативный способ в посте.

            Спасибо за замечание.

            Ответить
      • Юлия (2 комм.)

        Здравствуйте! Необходима помощь :( Скажу сразу, что я не профессионал, так получилось, что по моему незнанию при переносе сайта на новый сервер, я просто удалила весь старый контент и заново создала все статьи. Человек, который помог с сайтом, редирект тоже не предусмотрел и не посоветовал.

        Теперь ситуация такая, что в поисковиках сайт практически выпал (жду когда проиндексируется как новый, переехали 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/

        Буду очень благодарна за помощь!

        Ответить
        • АлаичЪ

          Не существует никаких скриптов, которые бы делали редиректы, каждый сайт индивидуален, тут только прибегать к помощи специалистов конкретно для вашего сайта. Увы...

          Ответить
          • Юлия (2 комм.)

            Вы помочь могли бы? Вписала уже редирект на кучу отдельных ссылок. Гугл никак не проиндексирует мою карту, две недели прошло, в итоге в поиске сайта вообще нет :( И все это последствия "переезда". Переадресация просто необходима, плюс дополнительные меры по поисковой оптимизации. Не могли бы вы заняться сайтом и на каких условиях? Буду благодарна получить ответ на почту.

            Ответить
  2. Андрей (6 комм.)

    RewriteCond %{QUERY_STRING} ^post=(.+)$

    RewriteRule (.*) $1? [R=301,L]

    данный редирект не работает на сайте под ДЛЕ.

    Ответить
    • Андрей (6 комм.)

      и вообще нигде не работает, что делать?

      Ответить
      • АлаичЪ

        Попробуй такой вот вариант:

        RewriteCond %{REQUEST_URI} ^(.*)&post=
        RewriteRule ^(.*)&post=(.*)$ $1 [R=301,L]

        Отпишись после проверки обязательно :)

        Ответить
        • Андрей (6 комм.)

          На ДЛЕ сайте редиректит отлично) пасип. но вот на друпальном сайте нет.

          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

          Ответить
          • АлаичЪ

            Прочитай-ка вот этот пункт: "И последний пример — разбор частой ошибки с адресом от корня сервера".

            Ответить
            • Андрей (6 комм.)

              Да, не все еще прочитал, сейчас все в норме, спасибо!

              Ответить
  3. Роман (4 комм.)

    АлаичЪ, здравствуй!

    Если на сайте имеют место незначительные дубли текста (именно текста, а не целых страниц) — стоит волноваться?

    Это связано с категоризацией материалов — краткое описание идет на несколько страниц + на главную...

    Может что-то посоветуешь, а то все жадные — делиться не хотят инфой.

    Заранее спасибо,

    Роман

    Ответить
    • АлаичЪ

      Волноваться не стоит, это типичная ситуация.

      Ответить
  4. Александр (3 комм.)

    Спасибо за это ))

    RewriteCond %{REQUEST_URI} ^(.*)\&post=

    RewriteRule ^(.*)\&post=(.*)$ $1 [R=301,L]

    Ответить
  5. Алекс (45 комм.)

    Замечательный пост, спасибо!

    Как раз на днях занимался редактированием клиентского сайта, пришлось объединить 3 статьи в одну, в итоге 2 новости удалены, сделал с них 301 редирект на объединенную статью. Редиректит, но на конце добавляет "?newsid=9&seourl=waterfall&seocat=vodostochnye-sistemy" — наверное благодаря всяким ДЛЕшным примочкам в стандартном файле .htaccess. Подскажите, как поправить, пожалуйста.

    Ответить
    • АлаичЪ

      Значит где-то накосячил, раз при редиректе добавляется кавычка на конце, проверь свои правки.

      Вообще чтобы убрать кавычку, можно заюзать такой редирект:

      RewriteRule ^(.*)"$ $1 [R=301,L]
      Ответить
      • Алекс (45 комм.)

        В смысле кавычка? Это я в кавычках написал то, что добавляется к урлу страницы, на которую редиректит.

        Вот так она выглядит

        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 — АлаичЪ, сделай его!

        Ответить
        • АлаичЪ

          Хах =) А я думал кавычка добавляется =) Не надо было в кавычки брать строку, было бы понятнее...

          Ну да ладно, сделай вот так:

          RewriteCond %{QUERY_STRING} ^newsid= [NC]
          RewriteRule (.*) $1? [R=301,L]

          И будет тебе счастье!

          Ответить
          • Алекс (45 комм.)

            Хех, теперь со всех страниц редиректит на главную — добавлял в начало файла после редиректа с www.

            Ответить
            • АлаичЪ

              Не может такого быть, только если у тебя НЕ ЧПУ. Данный код обрезает все параметры и редиректит на url без параметров. А так как НЕ ЧПУ url'ы построены именно на параметрах, то конечно будет редирект, но для ЧПУ url'ов все должно быть нормально.

              Ответить
              • Алекс (45 комм.)

                Настройки ЧПУ http://clip2net.com/s/2LSOV скрин

                Сайт подписан в профиле, вот пройди по ссылкам — везде редирект!

                Убираю код — и все норм.

                Ответить
                • АлаичЪ

                  Да, подозреваю, что это из-за того, что параметры не успевают передаться скрипту, как их перехватывает mod_rewrite и отбрасывает. Перенеси строки кода из начала в конец файла.

                  Ответить
                  • Алекс (45 комм.)

                    Перенес — не помогло. Спасибо, что возился со мной, не буду больше отнимать время.

                    Если вдруг появится решение моей проблем — буду очень рад увидеть его в комментах, буду следить.

                    Ответить
                    • Алекс (45 комм.)

                      Так, до обсуждения НЕ стояло "Обрабатывать неверные URL ЧПУ" (на скрине уже стоит "Да")

                      В общем, теперь такой байды нету

                      http://site.com/vodostochnye-sistemy/7-hunter-plastics.html?newsid=9&seourl=waterfall&seocat=vodostochnye-sistemy

                      Редиректит на нормальный адрес. Ах, этот ДЛЕ :)

                      Еще раз спасибо!

                    • АлаичЪ

                      Рад, что все решилось :) Обращайся, если что!

  6. Евгений (5 комм.)

    Алаичъ, огромный Вам респект за этот материал. Я поднимал вопрос про дубли с параметром & на форуме, вы обещали, вы сделали... Здесь вы наглядно показали как делать 301-й. Вы дали частный случай для ссылок из вконтакте. Пока я с такими ссылками не сталкивался, но вот на днях обнаружил дубль главной страницы такого рода:

    http://site.ru/&sa=U&ei=AsguT72dLdHLtAaZ0tyVDQ&ved=0CCwQFjAIOFo&usg=AFQjCNFwbE9i0bqrQUGJLoDh6xyVd1nhxg

    Не знаю, откуда робот узнал о таком адресе, но факт остаётся фактом. И этот дубль находится в выдаче гугл. Я ваш пример переделал, я заменил "&post=" на "&" проверил, редирект работает на главную. Я правильно сделал?

    Раньше подобного рода дубли я удалял в панели вебмастера, на время это решало проблему, но они плодились снова и снова. Надеюсь, что сейчас такая проблема отпадёт совсем. Ещё раз ОГРОМНОЕ ВАМ СПАСИБО... Вы решили такую проблему, которая не давала мне нормально жить, спать и даже на баб тяжело вставал (шутка конечно).

    Ответить
    • АлаичЪ

      У меня тоже были подобного рода дубли, откуда они берутся я уже не помню, но зато решение знаю :)

      Так, как сделал ты — не правильно, хоть и работает. Нельзя оставлять только один знак амперсанда & как условие, т.к. перезапись может применяться для других адресов, где редирект не нужен. Короче, код лучше сделать таким образом:

      RewriteCond %{REQUEST_URI} ^(.*)&sa=
      RewriteRule ^(.*)&sa=(.*)$ $1 [R=301,L]
      Ответить
      • Евгений (5 комм.)

        У меня в связи с этим возник ещё небольшой вопросик...В роботсе есть запись Disallow: /& Её оставить? Или нужно убрать? И работает ли такая комбинация вообще?

        И немного не в тему... Гугл проиндексировал карту сайта (xml) и она отображается в результатах поиска.Её нужно закрыть от индексации? Как-то стрёмно.Развейте мои страхи.Чтобы вы сделали в такой ситуации?

        Ответить
        • АлаичЪ

          Запись из robots.txt убери, иначе поисковики редиректы не обработают. На карту сайта не обращай внимания, ничего в этом криминального нет.

          Ответить
  7. Александр (2 комм.)

    Алаичъ спасибо за пост!

    А меня интересует вопрос! где-то читал что вы напишите пост о том как убрать (http://site.ru/?abrakadabra)

    у меня на любой страницы такая проблема!

    Ответить
    • Евгений (5 комм.)

      Читай выше...Просто поменяй "&post=" на "?" в редиректе.Сам редирект в статье пр.вконтакте...

      Ответить
      • АлаичЪ

        Евгений, твой случай не сработает :)

        Я обновил немного пост, добавил еще несколько кейсов с типичными ситуациями. И решение данной проблемы как раз под заголовком "Избавляемся от параметров или меток в адресе".

        Ответить
  8. Евгенич (84 комм.)

    Серьезный труд. Отличная статья. Всё самое необходимое собрано и отсортировано. Спасибо!

    Ответить
  9. Андрей (2 комм.)

    Сделал как в примерах. Почти все битые ссылки исправил. Кроме старых адресов сервисов, которые были на сайте. Можете помочь?

    Старые адреса страниц сервисов имеют вид:

    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

    но не фурычит

    Ответить
    • АлаичЪ

      Конечно не фурычит, потому что это параметры =)

      План действий таков:

      RewriteCond %{QUERY_STRING} ^part=text-name$
      RewriteRule ^(.*)$ services/generate-name-text.html? [R=301,NC,L]

      Все остальное по аналогии, сам разберешься :)

      Ответить
      • Андрей (2 комм.)

        Да. Теперь все фурычит. Благодарю.

        Ответить
      • Саша (9 комм.)

        А зачем вопросительный знак после html? ?

        Ответить
        • АлаичЪ

          Так надо — такой ответ устроит? :) Это необходимо, чтобы избавиться от параметров.

          Ответить
  10. Fantik (6 комм.)

    А вы сами пробовали вот такой вот вариант использовать?

    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

    Или просто добавили для наглядности как и в других подобных статьях. Дело в том, что когда я менял структуру одного из своих сайтов, то столкнулся с проблемой, которую не мог решить. Пробовал именно такой путь. Для динамических страниц, да ещё и с ЧПУ он не подходит. На статических не тестировал

    Ответить
    • АлаичЪ

      Этот вариант подходит для одиночных страниц и не динамических. Под динамическими тут понимаются страницы с параметрами, разумеется, а страницы с ЧПУ аналогичны статическим.

      Раз не получилось, значит неправильно что-то делал...

      Ответить
      • Fantik (6 комм.)

        Как раз таки при таком редиректе с ЧПУ на новую страницу дополнительно передаются значения GET параметров. Зря я не сделал скриншоты результатов. Если будет время покажу, что выходит

        Ответить
  11. Дмитрий (2 комм.)

    Добрый день :) Мой комментарий будет малоинформативен, т.к. не содержит вопроса но я просто хочу поблагодарить :) Спасибо вам за статью — очень подробно все разжевано, и куча примеров реальных кейсов — я настолько разжеванной инфы по редиректам еще нигде не видел.

    Ответить
  12. Optimist (2 комм.)

    Прекрасная развёрнутая статья, спасибо.

    Скажите, а может ли на разных серверах 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]

    Ответить
  13. lazzy (1 комм.)

    Есть насущный вопрос. Ссылочное передается при 301 редиректе? В Яндексе? Гугле?

    Ответить
    • Optimist (2 комм.)

      по идее должно, для того он и придуман. Сейчас вот 3-й месяц с яшей бьюсь, чтобы сайты склеил и ссылки подцепил к новому домену.

      Ответить
      • АлаичЪ

        Да, ссылочное передается, когда происходит склейка страниц. И в Яндексе и в Гугле, главное чтобы был 301 редирект, а не 302.

        Ответить
  14. mixail366 (13 комм.)

    Тут дело такое. Есть дубль с IP адреса от сервера. Сайт находится на отдельном ВПС. Есть в Вашем посте как сделать редирект для nginx. Но у меня в связи со спецификой сайта пришлось его отключить, по другому никак не получится. Как и где можно прописать редирект в apache ? Только я начинающий. Есле можно поподробнее. Или каким способом можно сделать такой редирект еще?

    Ответить
    • mixail366 (13 комм.)

      Мне на хостинге помогли сделать такую заглушку.

      http://skrinshot.ru/files2/15651189447661706157813402257387.jpg

      Допустимо ли так делать или все же надо было делать редирект? Ведь возможно тот дубль уже успел попасть за пару недель в индекс поисковиков. Или они там быстро отвалятся.

      Ответить
      • АлаичЪ

        Что такое zaglushka.site? Если речь про поле псевдоним, то это делается, чтобы сайт был доступен при вводе адреса как с www, так и без www. Редирект делать надо как обычно.

        Ответить
        • mixail366 (13 комм.)

          Вы уж извините меня чайника полного, но я ж и спрашивал как имеено делается такой редирект. И то что для Вас считается сделать как обычно, для меня непонятно совсем. Мне нужен редирект с ссылки с IP адресом сайта на мой сайт. Редирект с IP адреса сервера в движке не пропишешь. Его надо прописывать где то на самом сервере. Вот я и спрашивал где и как? Вы же написали , что очень хорошо разбираетесь в Apache, а мне именно там и надо все прописать и настроить.

          Ответить
          • АлаичЪ

            С этим вопросом вам лучше к хостеру обратиться, оно надежнее будет.

            Ответить
  15. сергей (16 комм.)

    Ситуация такова. Создал сайт с фильмами, сделал категории по жанрам. Те фильмы которые выйдут в прокат к примеру через месяц я добавляю в категорию "трейлеры" потом когда фильм выйдет в прокат я меняю категорию на "мелодрамы" при этом меняется адрес страницы. для перенаправления на новую страницу используется 301. Как на такое отреагируют ПСы?

    Ответить
    • АлаичЪ

      Все нормально, так и надо делать.

      Ответить
  16. Min-Z-Drav (7 комм.)

    Вот у меня 3 зеркала

    a) site.ru

    b) site.com

    c) сайт.рф

    Подскажите пожалуйста как поставить с доменов b и c редиректы на домен a?

    Ответить
    • АлаичЪ
      RewriteCond %{HTTP_HOST} ^site.com [OR]
      RewriteCond %{HTTP_HOST} ^сайт.рф
      RewriteRule ^(.*)$ http://site.ru/$1 [R=301,L]
      Ответить
  17. remont63 (12 комм.)

    RewriteRule ^(.*) index\.php$ $1 [R=301,L]

    с этим редиректом происходит как раз все наооборот

    Ответить
  18. Павел (2 комм.)

    Здравствуйте, АлаичЪ! очень нужна Ваша помощь. Нужен редирект на ссылки с параметрами. Перепробовал уже кучу вариантов — пока что ни один не помог.

    Как можно убрать дубли в страницах Joomla такого вида:

    sayt.ru/?start=5

    sayt.ru/?start=5/

    sayt.ru/categoriya?start=5

    sayt.ru/categoriya?start=5/

    Как видите по ссылкам Выше – дубли со слешем получаются.

    P.S. Стоит Joomla 2.5, сторонние компоненты не использую.

    Заранее спасибо за ответ!

    Ответить
    • АлаичЪ

      А вот так попробуй:

      RewriteCond %{QUERY_STRING} ^start=([^/]+)/ [NC]
      RewriteRule ^(.*)?([^/]+)/ $1?$2 [R=301,NC,L]

      Добавлять после RewriteEngine On

      Ответить
  19. Роман (4 комм.)

    Кстати, на счет редиректа с index.php через htaccess — вариант не катит, т.к. ломает последующие конструкции построения ЧПУ-ссылок для других модулей или категорий новостей. Вот так заработало:

    RewriteCond %{THE_REQUEST} ^[A-Z]{3,9} /index.php HTTP/
    RewriteRule ^index.php$ http://site-name.com/ [R=301,L]

    PS как тут в комментах использовать спец.коды?

    Ответить
    • АлаичЪ

      Вариант был приведен для примера чтобы показать проблему с путем от корня сервера.

      Да, твой вариант в комментарии верный, он работает.

      PS Все комменты я оформляю вручную, если это необходимо.

      Ответить
  20. Alex (19 комм.)

    У меня такой случай. Есть нормальные страницы, скажем site.ru/category/85-nazvanie.html (как вы поняли, стоит dle). Но в ошибках google webmasters выдает иногда такое site.ru/category/85-nazv, т.е. ссылка обрывается или обрезается.

    В связи с этим вопрос, как можно сделать перенаправление на нормальный адрес?

    И другой вопрос, куда перенаправлять страницы с удаленным тегами?

    Ответить
    • АлаичЪ

      Для DLE надо активировать настройку в админке "Обрабатывать неверные URL ЧПУ". Теги можно на главную редиректить.

      Ответить
      • Alex (19 комм.)

        В принципе я так и думал, что так ответишь, но в админке все активировано, но ошибки есть.

        Ответить
        • АлаичЪ

          Главное, чтобы редирект срабатывал, а ошибки со временем пропадут.

          Ответить
          • Alex (19 комм.)

            Редирект как раз и не срабатывает, открывается страница с ошибкой.

            Ответить
  21. Ирина (1 комм.)

    Для меня некоторые вопросы достаточно сложны. Но вот 404 ошибку заменить на 301 редирект — это отличная идея. Спасибо за идею.

    Ответить
  22. Babenko (1 комм.)

    Отличная статья, только вот читается тяжело. Слишком уж много информации. Кстати, не получилось сделать редирект через php, пришлось делать с помощью .htaccess

    Ответить
  23. Илья (1 комм.)

    Всем привет !!! Есть старые страницы сайта. Например одна из них: http://www.site.ru/Institute/?242 — как сделать редирект на новую? . не черта из за этого знака ? вопрос не получается!

    Ответить
    • Лёша (1 комм.)

      У меня проблема со знаком вопроса в урл. то есть если урл содержит вопросительный знак site.com/index.php?asdf

      то в .htaccess не могу переадресовать. Как с этим быть?

      Ответить
  24. Владимир (1 комм.)

    Статья отличная — спасибо! Очень удобно, когда все необходимое собрано в одном месте. У меня такой вопрос... при переклейке доменов можно ли просто на хостинге в панели управления поставить редирект со старого домена на новый? или еще что-то для этого потребуется дополнительно прописать?

    Ответить
    • АлаичЪ

      Не знаю, технология не важна, важен результат. Как проверить ответ сервера, я писал в конце поста, вот перейдите по старому домену и если произойдет 301-редирект на новый домен — значит все окей, можно спать спокойно!

      Ответить
  25. Юрий1 (1 комм.)

    У меня ничего не получилось , как я не старался , вопрос что я сделал не так ? когда все делал правильно.

    Ответить
  26. Дмитрий (44 комм.)

    Здравствуйте, Александр.

    Есть следующая ситауция.

    Главная страница сайта ввиду специфики доступна по двум адресам:

    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/

    Как это сделать, помогите, пожалуйста?

    Ответить
    • Дмитрий (44 комм.)

      А при переходе на http://site.ru/ происходит редирект на http://www.site.ru/index.php и также появляется сообщение о 404-й ошибке.

      Ответить
      • АлаичЪ

        Ну вот ввиду специфики сайта я не смогу помочь, причин данной проблемы может быть целая куча, но я же не могу их знать...

        Ответить
      • Алексей (5 комм.)

        Подобная проблема.

        #Redirect 301 /kupit-med-v-saratove/.html http://купить-мед.рф/

        После этого осуществляется переход не на купить-мед.рф/, а на www.купить-мед.рф/

        joomla3

        Может кто знает решение этой проблемы???

        Ответить
  27. Дмитрий (1 комм.)

    Спасибо за пост, у меня наконец получилось сделать редирект. Пока все работает как часики, очень благодарен!

    Ответить
  28. 533312 (11 комм.)

    Приветствую АлаичЪ. тут в хабре прочитал (http://habrahabr.ru/post/172999/) что есть проблема с точкой в конце доменного имени.

    domain.zone. или domain.zone./

    решение которое написано в хабре не помогает, можешь написать решение, как сделать редирект?

    Ответить
  29. Артем (6 комм.)

    Интересная статья! АлаичЪ, у меня такая проблема, я заметил, что сайт отображается по любому поддомену, то есть, если ввести поддомен.site.ru (вместо поддомен можно вписать любое слово), то переходит на мой сайт... Что посоветуете в этой ситуации?

    Ответить
    • АлаичЪ

      Посоветую обратиться к хостеру, чтобы исправили эту ошибку.

      Ответить
      • Артем (6 комм.)

        У меня VDS и я их ответ наперед знаю: "у нас нет доступа к Вашей системе, решайте сами"...

        Ответить
        • Вячеслав (2 комм.)

          У меня точно такая же проблема, сайт открывается по разным поддоменам, сайт на VDS debian, хостер послал меня куда подальше, говорит мы не администрируем VDS сервера. Что делать не знаю, предполагаю что надо в apache закрыть соединения для любых неправильных имен сайта, но знаний в этой области отсутствуют, готов даже за отдельную оплату найти специалиста, если будут предложения пишите Slavik_1019@mail.ru.

          Ответить
          • Вячеслав (2 комм.)

            Вопрос решил, включил в ISP автоподдомены и все ок, сайт загружается только по основному имени.

            Ответить
  30. Дмитрий (4 комм.)

    Добрый день!

    В джумла 2.5 есть плагин "перенаправление". Его использовании является аналогом 301 редиректа? Склеятся ли страницы? Как узнать, подскажите? спасибо!

    Ответить
    • АлаичЪ

      С Джумлой не работал, соответственно за плагин ничего сказать не могу. А как проверить ответ сервер, написано в конце поста.

      Ответить
      • Дмитрий (4 комм.)

        сделал 301 редирект через .htaccess

        при проверке старой страницы через плагин для Хрома, выдается статус 200, а не 301, это нормально???

        Ответить
        • АлаичЪ

          Нет, не нормально, значит редирект на работает, раз выдает 200, должен отдавать 301.

          Ответить
          • Дмитрий (4 комм.)

            вот запись в .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 ОК

              Все именно так и должно быть!

              Ответить
              • Дмитрий (4 комм.)

                вот спасибо, мил-человек! успокоил! отлично!

                Ответить
  31. Дмитрий (JD) (6 комм.)

    Здравствуйте.

    Подскажите пожалуйста, как можно реализовать следующий редирект. Есть адрес вида 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

      Ответить
      • Дмитрий (JD) (6 комм.)

        Спасибо за ответ. Но в том то и дело, что так оно не работало. Возможно, это глюки виртуального сервера (денвер). Попробую на реальном хостинге это сделать на тестовых страницах.

        Ответить
        • АлаичЪ

          Возможно и глюки Денвера — не забудь потом отписаться, когда попробуешь на реальном сайте.

          Ответить
      • Дмитрий (JD) (6 комм.)

        Редирект работает, оказалось, после каждой правки .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 добавь:

          RewriteRule ^(.*)master/otkrytki-i-podelki-svoimi-rukami/$ http://mydomen/otkrytki-i-podelki-svoimi-rukami.html [R=301,L]
          Ответить
          • Дмитрий (JD) (6 комм.)

            Получаю ошибку 500. Логи с причинами не нашел нигде, ни в каталоге с сайтом, ни в каталогах денвера.

            Ответить
            • Дмитрий (JD) (6 комм.)

              Заработало. В последнем варианте код правильный. Спасибо большое.

              Ответить
  32. Алексей (3 комм.)

    Подскажите пожалуйста как правильно сделать редирект с site.ru/forum на site.ru/forum/

    ибо обе странице в индексе что не есть хорошо. При этом в .htaccess

    RewriteRule ^forum (/?)+$ index.php?do=forum&action=index [L]
    RewriteRule ^forum/moderation (/?)+$ index.php?do=forum&action=moderation [L]
    RewriteRule ^forum/moderation/page- ([0-9]+)(/?)+$ index.php?do=forum&action=moderation&page=$1 [L]
    RewriteRule ^forum/categories- ([0-9]+)(/?)+$ index.php?do=forum&action=categories&id=$1 [L]
    RewriteRule ^forum/categories- ([0-9]+)/page- ([0-9]+)(/?)+$ index.php?do=forum&action=categories&id=$1&page=$2 [L]

    Ответить
    • АлаичЪ
      RewriteCond %{REQUEST_URI} ^(.*)/forum$
      RewriteRule ^(.*)/forum$ $1/forum/ [R=301,L]
      Ответить
  33. Алексей (2 комм.)

    Добрый день!

    Столкнулся с проблемой, что адреса типа http://сайт.ru/index.php?categoryID=ххх продублировались адресами http://сайт.ru/?categoryID=ххх. Подскажите, пожалуйста, как настроить 301 редирект, чтобы http://сайт.ru/?categoryID=ххх заменялись http://сайт.ru/index.php?categoryID=ххх.

    Во всех примерах всегда избавляются от index.php, а тут обратная проблема =)

    Спасибо!

    Ответить
    • АлаичЪ

      Да, непростая ситуация :) Но решение есть!

      RewriteCond %{REQUEST_URI} !.php
      RewriteCond %{QUERY_STRING} ^categoryID=(.*)$
      RewriteRule ^(.*)$ /index.php [R=301,NC,L]
      Ответить
      • Алексей (2 комм.)

        Александр, огромное спасибо!

        Ответить
  34. Максим (1 комм.)

    А можно сделать редирект на другую страницу если в url адрес написан кириллицей?

    Например: sait.ru/какае_то_страница/ надо заменить на sait.ru/kakae_to_stranica/

    Ответить
    • АлаичЪ

      Можно, возьми адрес страницы на кирилице, открой в браузере, скопируй из адресной строки содержимое и вставь в блокнот, получится длинный адрес с буквами, цифрами и процентами. Вот его и надо использовать, далее все по стандартной схеме.

      Ответить
  35. petrea2003 (8 комм.)

    добрый день как убрать эти страницы:

    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]

    но это убирает только первую строку а остальные не получается.

    Ответить
  36. Антон (3 комм.)

    Здравствуйте. У меня проблема с редиректами для seo.

    Нужно сделать так, чтобы при запросе сайт приводился к виду без www и убирался последний слеш, если он есть.

    Я пишу так:

    Options +FollowSymLinks
    RewriteEngine On
    RewriteBase /
     
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_URI} ^(.+)/$
    RewriteRule ^(.+)/$ www.site.ru/$1  [R=301]
     
    RewriteCond %{HTTP_HOST} ^www.site.ru [NC]
    RewriteRule ^(.*)$ http://site.ru/$1 [L,R=301]

    Если в первом редиректе не писать с www, то возникает зацикливание.

    Я так понимаю, что если возникает первый случай, то должно сформироваться в виде с www и потом это должно отрезаться нижним редиректом. Если первое не возникает, то отрезается втрорым.

    Но при запросе например http://site.ru/cena/ на выходе получается так http://site.ru/www.site.ru/cena.

    Я так понимаю, что это связано с редиректом на свой хост и там где-то автоматически убирается и вставляется конструкция http://thissite, но врубиться никак не могу.

    Помогите!

    Ответить
    • АлаичЪ

      Мутная у тебя какая-то схема. Попробуй вот такой вариант, вместо своего:

      Options +FollowSymLinks
      RewriteEngine On
       
      RewriteCond %{HTTP_HOST} ^www.(.*) [NC]
      RewriteRule ^(.*)$ http://%1/$1 [R=301,L]
       
      RewriteBase /
      RewriteCond %{REQUEST_FILENAME} !-d
      RewriteCond %{REQUEST_URI} ^(.+)/$
      RewriteRule ^(.+)/$ $1 [R=301,L]
      Ответить
      • Антон (3 комм.)

        Не работает. 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, все улетит в цикл.

          Ответить
          • Антон (3 комм.)

            Ясно, буду смотреть в движке тогда (Амиро).

            Большое спасибо за помощь.

            Ответить
  37. Евгений (1 комм.)

    Здравствуйте! Начитался всех этих кодов, и получилась каша, должного результата не добился...

    Ситуация такая: сайт.ру/?страница — почему то такой урл часто вылазит и не отдает нужную "страницу", а вылазит главная с таким урлом. Необходимо прописать редирект на нормальный — сайт.ру/страница

    Ответить
  38. Sopor_HaK (3 комм.)

    Добрый День. Третий день бьюсь. Помогите сделать.

    sate/index.php?ghghghg

    Если делаю редирект на sate то остальные страницы типа sate/obzory.php?ghghghg перестают работать

    Заведомо благодарен.

    Ответить
    • АлаичЪ

      Попробуй такой вариант:

      RewriteCond %{REQUEST_URI} ^index.php
      RewriteCond %{QUERY_STRING} ^ghghghg [NC]
      RewriteRule ^(.*)index.php?(.*)$ $1? [R=301,L]
      Ответить
      • Sopor_HaK (3 комм.)

        Спасибо за помощь. Но не работает.

        Может еще чего попробывать.

        Заведомо благодарен.

        Ответить
        • АлаичЪ

          В таком случае просто закрой дубль в robots.txt и все.

          Ответить
          • Sopor_HaK (3 комм.)

            Да в роботе закрыл давно. Но нет нет бывает проскакивает. Видимо ранее были ссылки на эти адреса, упоминания.

            Спасибо за помощь.

            Ответить
  39. Stas (1 комм.)

    Можно ли сделать редирект, если присутствуют любые категории в ссылках?

    У меня категорий на сайте нет совсем, все ссылки только вида site.ru/link.html

    Хочу все заходы на сайт по внешним ссылкам вроде:

    site.ru/111111/link.html

    site.ru/111111/яяя/222/link.html

    site.ru/abcd/qwerty/999/666/link.html

    ну и подобные, отправлять на главную страницу, как такое правило прописать?

    Ответить
  40. Павел (5 комм.)

    У тебя прямо что не статья, то глава из книги. Супер.

    Не часто такое бережное отношение к контенту встречается.

    Ответить
    • АлаичЪ

      Больших усилий это стоит для меня. Но вот как раз ради подобных отзывов это и делается :)

      Ответить
  41. Саша (9 комм.)

    А в чем разница указывать редирект как:

    RewriteRule url nexturl или Redirect 301 url nexturl

    Ответить
    • АлаичЪ

      Redirect 301 срабатывает только для одного определенного url, в то время как RewriteRule работает с регулярными выражениями, шаблонами.

      Ответить
  42. Елена (8 комм.)

    Добрый день.

    Большое спасибо за пост, особенно за способ обрезания хвостов типа ?lang=RU :)

    А что можно сделать с хвостами типа ?wb_8723_session_id=e11uq0p6k40t95b8h2n8gim6g1 ? Почему-то для главной гугл находит 4 подобных довеска.

    Ответить
    • Елена (8 комм.)

      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 попробуйте:

        RewriteCond %{QUERY_STRING} lang=RU$ [NC]
        RewriteRule (.*) $1? [R=301,L]

        А для ?wb_8723_session_id= и т.д. попробуйте:

        RewriteCond %{QUERY_STRING} ^wb_ [NC]
        RewriteRule (.*) $1? [R=301,L]
        Ответить
        • Елена (8 комм.)

          Код для lang=RU приводит к ошибке: урл http://mysite.ru/pages/index.php?lang=RU принимает вид http://mysite.ru/homez.626/mysite/www/pages/index.php

          Ответить
          • АлаичЪ

            Надо не забыть перед кодом ставить строку RewriteBase /

            Ответить
            • Елена (8 комм.)

              The webpage at http://mysite/pages/index.php?lang=RU has resulted in too many redirects.

              Ответить
  43. Владимир (1 комм.)

    Здравствуйте.

    Я делаю редирект с сайт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 работает

    Что я делаю не правильно? Спасибо.

    Ответить
    • АлаичЪ

      Вообще # обозначает якорь, или указатель. Не уверен, что возможно сделать редирект на такую конструкцию...

      Ответить
  44. кирилл (1 комм.)

    Подскажите пожалуйста. Сделал редирект с site.ru на www.site.ru. Все отлично работало. хочу отменить это и сделать обратный редирект, но кода редиректа в htaccess не осталось. Добавляю новый редирект и у меня все зацикливается. Как мне отменить самый первый редирект и сделать заново все? (файл htaccess удалял и заново писал. не помогает)

    Ответить
    • АлаичЪ

      Вместе одного редиректа сделай другой. В настройках сайта заодно проверь, какое именно там главное зеркало указано. Все приведи к одному виду. После этого, если не поможет, перезагрузи сервер, почисти кеш браузера.

      Ответить
  45. troid (5 комм.)

    АлаичЪ привет.

    делаю такой редирект.

    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/" верно?

      RewriteCond %{REQUEST_URI} ^(.*)page/forum-2/page/47-uslugi/pomoshch-v-litsenzirovanii/(.*)$
      RewriteRule ^(.*)forum-2/page/47-uslugi/pomoshch-v-litsenzirovanii/(.*)$ $1$2 [R=301,L]

      Так должно работать.

      Ответить
  46. petrea2003 (8 комм.)

    добрый день как избавится от этих страниц:

    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

      Ответить
  47. Михаил (1 комм.)

    Добрый день! Вопрос

    есть адрес http://site.ru/svadebnaya-arka#sigProGalleria1f7739a664

    хочу сделать редирект на http://site.ru/svadebnaya-arka

    пишу

    RewriteCond %{REQUEST_URI} ^(.*)\#sigProGalleria [NC]

    RewriteRule ^(.*)\#sigProGalleria (.*)$ $1 [R=301,L]

    не работает, подскажите где косячу?

    Ответить
    • АлаичЪ

      # — это знак якоря, указателя места на странице. Это не дубль, поисковик якоря не учитывает, так что беспокоиться не стоит!

      Ответить
  48. Диана (2 комм.)

    Здравствуйте ! Меня вопрос терзает один — можно всё вышенаписанное применить к dle 9.8 ?

    Ответить
    • АлаичЪ

      А причем тут DLE? Это общая теория, никакой зависимости или привязки к CMS нет — так что подойдет для чего угодно!

      Ответить
      • Диана (2 комм.)

        Понятно, спасибо большое !

        Ответить
  49. Дмитрий (44 комм.)

    Спасибо за бесценный труд!

    Но я не понял одного. Ведь пример с абракадаброй ― это всего лишь пример. Существует ли код редиректа, который перенаправляет на главную вне зависимости от того, что указано после знака вопроса (за исключением служебных страниц в DLE, например)? Идея ведь в том, чтобы исключить возможность индексации дублей главной страницы. А кроме пресловутой абракадабры это может быть что угодно. Например, http://site.ru/?parampampam или http://site.ru/?aramzazam

    P.S. Вспомнил, что проблема эта была озвучена на одном из мастер-классов по SEO, с тех пор не могу никак выкинуть ее из головы.

    Ответить
    • АлаичЪ

      Редирект в htaccess работает по шаблонам, то есть серверу надо как минимум дать знать, когда делать редирект, а когда нет. "Сделай мне что-нибудь" — такого сервер не понимает, ему нужны точные данные, коими и является название параметра после вопроса.

      Все головные боли решаются использованием метатега canonical на сайте, это не будет делать редиректов, но не позволит "левым" страницам индексироваться.

      Ответить
      • Дмитрий (44 комм.)

        Понял, спасибо.

        А не подскажите, как установить атрибут rel="canonical" для главной страницы сайта?

        Ответить
        • АлаичЪ

          Не подскажу, потому что для каждого сайта (cms) это индивидуально.

          Ответить
          • Дмитрий (44 комм.)

            Речь идет о всеми нами любимом DLE.

            Ответить
            • АлаичЪ

              Добавить в main.tpl

              [aviable=main][page-count=1]<link rel="canonical" href="http://site.ru/" />[/page-count][/aviable]

              Ответить
  50. Елена (8 комм.)

    Не нашла, как через .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

      Ответить
      • Елена (8 комм.)

        Если движок НЕ DLE — все равно туда?

        Ответить
        • АлаичЪ

          Нет, не туда. Для каждого движка все индивидуально.

          Ответить
  51. Дмитрий (1 комм.)

    Много тут было вопросов про редиректы , но вот хотелось бы научится исправлять ситуацию с чпу (для DLE конечно).

    Редирект ЧПУ

    с 1->2

    с 1->3

    с 2->1

    с 2->3

    с 3->1

    с 3->2

    Ответить
    • АлаичЪ

      Включи в админке пункт "Обрабатывать неверные URL ЧПУ:" и не будет никаких проблем.

      Ответить
  52. Конст (1 комм.)

    Алаичъ спасибо за пост!

    Нужно перенести сайт на Wodpress.

    Домен не изменился.

    Обязательных страниц где-то 40, а все остальные на главную.

    Как бы такое провернуть.

    Заранее благодарен.

    со страницы

    http://site.com/catalog/c/50/

    на

    http://site.com/?product_cat=50

    Ответить
  53. Олег (14 комм.)

    Привет!

    Подскажите, как лучше сделать.

    Ссылки в 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 не самый безопасный вариант.

      Ответить
  54. zennuk (14 комм.)

    Здравствуй АлаичЪ!

    Нуждаюсь в твоей помощи так как сам могу немного на тупить или не то что-то сделать.

    Проблема в том, что из-за спама в профилях на сайте пришлось их удалить. В результате чего появилось множество 404 ошибок (есть много ссылок с народа и других сайтов на данные профиля).

    Как правильно сделать редирект с 404 ошибкой (для удаленных профилей) такого вида http://sait.ru/user/Artemms на главную.

    Ответить
    • АлаичЪ

      А профили все на сайте удалил или какие-то остались? Вообще обычно профили закрыты от индексации в robots.txt, в этом случае не страшно, что там выдается 404 ошибка.

      Ответить
      • zennuk (14 комм.)

        Не все, только лишь малую часть. Профили закрыты с помощью meta robots по твоим рекомендациям.

        Ответить
  55. Олег (2 комм.)

    АлаичЪ, доброго времени суток! А вот вопрос: возможно ли сделать так, чтобы допустим с главной страницы старой версии сайта шла переадресация на новую версию сайта. Но вот при желании пользователя ознакомиться со старой версией сайта, он бы нажимал на ссылку на странице с новым сайтом и попадал на некоторые каталоги старого сайта (исключая главной страницы старого сайта, например, в каталог /news/, /glossary/ и т.п.), потому что там много интересных статей осталось, которые переносить в новый движок не хочется, а кто-то их ищет по старым ссылкам, и ссылок много уже накопилось за три года. Оба сайта на DLE. Старый лежит по адресу: http://64.psyfactoronline.com (сейчас тотально все перекидывается на новый, используя редирект в файле index.php); новая версия сайта находится в подкаталоге: http://64.psyfactoronline.com/new/ (он доступен для просмотра). Можете что либо посоветовать? Хотелось бы сохранить и новую, и старую версии сайта, и чтобы оба были доступны по своим адресам. Какое решение может быть в данному случае, если вообще возможно?.. С уважением, Олег.

    Ответить
    • Олег (2 комм.)

      Спасибо, наконец, сам разобрался, как лучше сделать. На самом деле, то, что я спрашивал, просто решается в самой панели администратора скрипта DLE: указывается каталог, из которого должен работать сайт. Вот и все, и скрипт автоматически вносит изменения в нужные файлы. Поэтому, всем спасибо, вопрос свой снимаю с повестки дня. Удачи!

      Ответить
      • АлаичЪ

        Спасибо, что отписались о найденном решении, а то у меня все не доходили руки ответить на комментарии на блоге.

        Ответить
  56. Sinsir (1 комм.)

    Подскажите как побороть такую ситуацию:

    site.ru/index.php

    должен слать на site.ru

    но при этом site.ru/index.php?p=2

    уже должен слать на site.ru/main.php?p=2

    То-есть если есть index.php то шлем на корень, а если есть еще строка запроса то index.php меняем на main.php плюс строка запроса.

    Ответить
    • АлаичЪ

      Я думаю, что вот как-то так должно это выглядеть:

      RewriteCond %{QUERY_STRING} ^p=([0-9]+)$
      RewriteRule ^(.*)/index.php $1/main.php [R=301,L]
      Ответить
  57. Дмитрий (7 комм.)

    Добрый день!

    Сайт на 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 нет. Помогите, пожалуйста!

    Ответить
    • АлаичЪ

      Вот так правильно будет:

      RewriteCond %{THE_REQUEST} ^[A-Z]{3,9} /index.html HTTP/ 
      RewriteRule ^index.html$ http://site/ [R=301,L]
      Ответить
      • Дмитрий (7 комм.)

        Пробовал, и еще так пробовал:

        Redirect 301 /index.html http://mywed74.ru

        в обоих случаях выкидывает на http://site/

        Что делать???

        Ответить
        • АлаичЪ

          А что разве не надо заменить site на адрес своего сайта?! Ну это же элементарно...

          Ответить
          • Дмитрий (7 комм.)

            уж изменил, поверьте! я ж написал в примере.

            Ответить
          • Дмитрий (7 комм.)

            RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.html\ HTTP/

            RewriteRule ^index\.html$ http://mywed74.ru/ [R=301,L]

            выкидывает на http://site/

            Ответить
            • АлаичЪ

              Попробуй в другом браузере, или очисти кеш. Редиректы браузерами часто кешируются.

              Ответить
              • Дмитрий (7 комм.)

                а ведь и точно! спасибо, работает!!!

                Ответить
  58. VadimSeo (5 комм.)

    Пытаюсь сделать простой редирект с страницы:

    http://www.мойсайт.com/?lang=HE&id=55

    на

    http://www.мойсайт.com/?lang=HE&id=54

    Но никак не получается. Знаю что структура УРЛ как таковая не идеальная, но на данном этапе заменить на человеческую не представляется возможным.

    Будь добр подскажи как должно выглядеть правило для .htaccess

    www. и index.php, уже сделал работает отлично, а с этими параметрами замучался.

    Ответить
  59. Елена (8 комм.)

    И снова я со своими дурацкими вопросами :)

    Можно ли снести содержание дефолтного .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] нет и быть не может.

      Ответить
  60. Андрей (1 комм.)

    Здравствуйте! Спасибо за статью, в закладки!)) У меня щас ситуация когда надо быстро сделать уйму редиректов со старой структуры на новую, времени разбираться нет, да и срегулярками и понимание 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/

      Вот так.

      Ответить
  61. Сергей (2 комм.)

    Статья отличная, оставлю закладку на блог.

    Я вот тоже решил себе сделать ЧПУ адреса, но возникла проблема с передачей двух параметров. Вообщем есть ссылка такого вида:

    /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 не работает.

    Подскажите, пожалуйста, как мне правильно составить эти ЧПУ.

    Ответить
    • АлаичЪ

      Может быть так, но я не уверен, как-то тут все мутно :)

      RewriteCond %{REQUEST_URI} ^year=([0-9]+)&month=([0-9]+)$
      RewriteRule ^archive.php? archive/year/%1/month/%2/ [R=301,L]
      RewriteRule ^archive/year/([0-9]+)/month/([0-9]+)/? archive.php?year=$1&month=$2
      Ответить
      • Сергей (2 комм.)

        Теперь наоборот работает ссылка /archive/year/2013/month/1/, а ссылка /archive/year/2013/ перестает работать.

        Ответить
        • АлаичЪ

          Значит ниже добавь еще вот такие правила:

          Может быть так, но я не уверен, как-то тут все мутно :)

          RewriteCond %{REQUEST_URI} ^year=([0-9]+)$
          RewriteRule ^archive.php? archive/year/%1/ [R=301,L]
          RewriteRule ^archive/year/([0-9]+)/? archive.php?year=$1
          Ответить
          • Сергей (1 комм.)

            Спасибо за помощь, буду что-нибудь пытаться сделать.

            Ответить
  62. Никита (1 комм.)

    Уважаемый АлаичЪ. Подскажите следующую вещь:

    у меня на сайте есть форма поиска. По нажатию кнопки поиска, в адресную строку браузера попадает следующее: site.ru/search.php?text=искомыйтекст

    Подскажите как сделать чтобы в адресной строке адрес выглядел так: site.ru/search/text/искомыйтекст

    Ответить
  63. Vlad (1 комм.)

    АлаичЪ, помоги начинающему. У меня есть site.ru и пара доменов сайт.рф, которые в админке хостера стоят как синонимы к site.ru, стоит ли мне их склеивать с site.ru, если да, то как.

    Заранее, спасибо!

    Ответить
    • АлаичЪ

      Не знаю, стоит ли. Цель то какая у этих доменов была, когда их покупали?

      Обычно, когда в панели управления хостера указываются зеркала/синонимы, то редиректы сами должны осуществляться средствами настроек сервера.

      Ответить
  64. Светлана (1 комм.)

    Здравствуйте, Александр.

    Подскажите, пожалуйста что прописать, чтобы избавиться от дублей, которые получаются не знаю за счет чего, но странички имеют вот такой вид

    сайт.ru////category//////salaty-iz-ovoschei

    сайт.ru//category//salaty-iz-ovoschei

    Лишних слешей может быть сколь угодно

    Как настроить переадресацию со всех подобных страниц на единственно верную

    посредством 301 редиректа?

    Ответить
    • АлаичЪ

      Где-то у меня был шаблон для таких случаев, но что-то найти не могу. Вспомнил только про php-вариант, тут я его описывал http://talk.alaev.info/topic/544/ Может быть это натолкнет на мысль.

      Ответить
  65. Сергей (1 комм.)

    Спасибо огромное за статью!

    Но я, все же, не могу справиться со своей задачей.

    Заменить группу правил, которые работают:

    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]

    Подскажите, пожалуйста, в чем ошибка.

    Ответить
    • АлаичЪ

      Так должно сработать:

      RewruteBase /
      RewriteCond %{QUERY_STRING} ^firma_kond=11$
      RewriteRule (.*) $1? [R=301,L]
      Ответить
  66. Андрей (1 комм.)

    Здравствуйте, после перенаправления с одного на другой сайты, был правильный редирект, но ссылки почему то стали отображаться без сэша, например http://drupich.netmultfilmy/2725-maks. -priklyucheniya-nachinayutsya-vse-serii-skachat-besplatno.html?newsid=2725&seourl=maks. -priklyucheniya-nachinayutsya-vse-serii-skachat-besplatno&seocat=multfilmy

    Ответить
  67. Роман (2 комм.)

    Здравствуйте! Замечательная статья! Очень полезный текст!!!!

    Сейчас бьюсь над своим онлайн-магазином Unionstore.re

    и очень хочу спросить и попросить совета — как эффективно поднять ранжирование именно в Гугл???

    Индекс стабильный, а ранж очень низкий. Плаваем на 9-10-11 страницах. Это при том, что в Яндекс держимся в ТОП10

    Ответить
  68. Kyandaz (1 комм.)

    Ребята помогите пожалуйста!!! Повторяющееся метаописание... (движок dle 9.5)

    http://mnntv.am/programs/2.../news_armenia/news_armenia/news_culture/news_sport/news_official/news_world/news_sport/

    Как избавиться? Спасибо.

    Ответить
    • АлаичЪ

      Совет один — обновиться до актуальной версии и включить в админе настройку исправления неверных url ЧПУ. И вообще, не в ту тему обращаетесь.

      Ответить
  69. Tirael (2 комм.)

    Здравствуйте!

    Добавил в файл .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.

    Ответить
    • АлаичЪ

      Попробуйте так:

      RewriteRule ^(.*)prices-order$ http://protectionprofile.ru/prices-order/poryadok-priobreteniya [R=301,L]
      Ответить
      • Tirael (2 комм.)

        Зацикливание пропало, но редирект не происходит :/

        Ответить
  70. Адель (1 комм.)

    Вопрос такой. Мне нужно из директории /ббб/ааа/ сделать редирект на /ббб/. Указанные в статье правила в чистом виде не помогли :) Подскажи пожалуйста как правильно!

    Ответить
  71. Алексей (8 комм.)

    Здравствуйте!

    Я новичок, толко постигаю SEO.

    Создал домен и 5 алиасов к нему 3 с www, два просто другие доменные имена, все обращаются ко одной папке на хостинге. По правилам SEO, нужно ли мне с них делать редирект 301 на основное имя? Мне нужно что бы поисковики цепляли все домены.

    Ответить
    • АлаичЪ

      Я ничего не понял. Если необходимо, чтобы по всем доменам выдавалась одинаковая информация — значит надо делать редирект. Если цель создания нескольких доменов иная, то я не знаю.

      Ответить
      • Алексей (8 комм.)

        Да нужно чтобы была одна и ты же информация.

        1)Будут ли поисковики видеть алиасы?

        2)Нужно ли создавать домены для других двух доменных имён?

        Ответить
        • АлаичЪ

          Делайте редиректы со всех адресов на один основной и не будет никаких проблем. По поводу тонкостей обратитесь в хостерам, они помогут сделать это наиболее оптимально.

          Ответить
  72. oleg (1 комм.)

    Подскажите, пожалуйста, как реализовать редирект со всех страниц вида

    "http://сайт.ру/info/страница" на "http://сайт.ру/blog/страница"

    сайт переехал на другую цмс. конечные страницы все остались, только название категории было изменено.

    спасибо.

    Ответить
    • АлаичЪ
      RewriteRule ^info/(.*)$ blog/$1 [R=301,L]
      Ответить
  73. Максим (2 комм.)

    Здравствуйте!

    Очень полезная статья и благо я нашел в ней то, что собственно меня интересовало, но вот методики решения так и не увидел. Я хочу показать на примере свою проблему.

    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 адреса).

      Ответить
  74. Алексей (8 комм.)

    Здравствуйте!

    Подскажите, пожалуйста, как сделать редирект.

    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]

      После этого все будет окей!

      Ответить
      • Алексей (8 комм.)

        Сделал так как вы подсказали:

        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] лишнее!

          Ответить
          • Алексей (8 комм.)

            Убрал OR. То же самое:"На этой странице обнаружена циклическая переадресация"

            Как будто заколдованная

            Ответить
            • АлаичЪ

              Ты меня в заблуждение вводишь! Зачем отрицание-то во всех строках стоит? Вместо !^ надо просто ^

              Ответить
              • Алексей (8 комм.)

                Ничего непонимаю. Опять что то не то?

                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]

                Помогите, плиз

                Ответить
                • АлаичЪ

                  Восклицательный знак в первой строке!

                  Ответить
                  • Алексей (8 комм.)

                    Ура!!! Получилось. Большое спасибо!

                    Ответить
  75. Николай (1 комм.)

    Здравствуй Александр. Очень полезная статья по редирект. У меня к тебе такой вопрос про редирект. Я на сайте сменил одну категорию: с "общая" на "строительство". И теперь Яндекс в поиске мне выбивает "общая", вместо "строительство", ну и естественно выбивает ошибку ( хотя на сайт заходит, но сразу в карту сайта). Да еще, я укоротил ссылку ЧПУ (/%postname%.html) убрал из нее категорию, чтоб сделать ссылки короче. В общем вот ссылка которая у меня отображается Яндексом как не рабочая: www.vsyakstroy.ru/общая/pokraska-potolkov-i-sten.html

    А вот уже рабочая ссылка с новой категории "строительство" (идет уже без категории): www.vsyakstroy.ru/montazh-peregorodok-iz-gipsokartona.html.

    В общем, Александр, мне нужна твоя помощь. Как мне осуществить смену категории через файл "htaccess"?

    Ответить
    • АлаичЪ

      Я так понял, проблема уже без меня решилась?

      Ответить
  76. Виктор (1 комм.)

    Здравствуйте, АлаичЪ.

    Подскажите, пожалуйста, как сделать такое:пользователь в поисковике набирает например "велосипед",ПС выдаёт ответ на нужные сайты там есть и мой,но ссылка не на index.php, а на index.php /viev_lesons.php?id=25.как реализовать чтоб при переходе из ПС по ссылке index.php /viev_lesons.php?id=25 попадали на на главную страницу сайта.

    Помогите пожалуйста ,никто не даёт внятного ответа, очень советовали обратиться к Вам.

    Ответить
    • АлаичЪ

      Вот так, наверное, должно сработать:

      RewriteCond %{QUERY_STRING} ^id=25$
      RewriteRule ^(.*)index.php/viev_lesons.php?(.*)$ $1? [R=301,NC,L]
      Ответить
  77. Дмитрий (7 комм.)

    Еще раз спасибо за статью! Обращаюсь не в первый раз...

    А как сделать редирект на мобильную версию сайта?

    Ответить
    • АлаичЪ

      Все зависит от того, что надо получить в итоге, если это просто редирект с одного урл на другой — это одно, а если надо определить тип устройства и в зависимости от этого принять решение делать редирект или нет — то это уже другой разговор.

      Ответить
      • Дмитрий (7 комм.)

        все мобильные перенаправить на мобильную версию сайта

        Ответить
        • АлаичЪ

          Как я и сказал выше — это не такая и простая схема. Вам надо поискать специализированный материал по этой теме, а еще лучше какой-нибудь плагин для CMS своего сайта.

          Ответить
  78. Анжел (3 комм.)

    Очень много полезной информации, однозначно — в закладки.

    У меня такой вопрос. Магазин переносится на другую cms, урлы все полностью меняются. Были типа /index.php?categoryID=34 теперь будут с чпу типа сайт/категория/товар.

    Как правильно в этом случае сделать переадресацю всех старых страниц сайта на новые?

    Ответить
    • АлаичЪ

      В этом случае лучше всего обратиться к программистам, не вручную же делать редиректы для всех страниц :)

      Ответить
      • Анжел (3 комм.)

        ну я об этом и спрашиваю, потому что понимаю, что вручную сделать это не реально. Что именно должен делать программист? Что вообще делается в этих случаях?

        Ответить
        • АлаичЪ

          Ну как что, программист он или не программист? В БД всегда есть четкое соответствие id и страницы. Каждому id всегда соответствует какая-то категория, а так же название, из чего и складывается ЧПУ адрес. Зная id мы знаем и ЧПУ адрес, который ему соответствует, знаем куда делать редирект.

          Ответить
          • Анжел (3 комм.)

            а чем этот способ отличается от редиректа "вручную" ? ну найду я в БД id категории, товара и тд... и как его перенаправить? Так же каждый прописывать?

            Ответить
            • АлаичЪ

              Или идите php учите или обратитесь к программисту. Вы меня не понимаете, вот и все...

              Ответить
      • Оксана (1 комм.)

        Здравствуйте, АлаичЪ!

        У меня похожий вопрос) Тоже есть сайт, с компонентом для создания ЧПУ. Надо обновить движок. В теории на новый сайт тоже можно поставить компонент для создания ЧПУ и присвоить статьям их же старые адреса. Сайт существует давно, странички проиндексированы, хотелось бы сохранить нажитое непосильным трудом)

        Вопрос: будет ли это аналогом редиректа или решение плохое и надо искать другие?

        Буду очень благодарна вам за помощь!

        Ответить
        • АлаичЪ

          Я не понял немного суть проблемы, и вообще есть ли она?

          Если вы собираетесь обновить движок, установить какой-то компонент, который приведет в итоге к тому, что url на новом движке будут в точности соответствовать прежним url, то никаких проблем нет в принципе.

          Ответить
  79. Игорь (3 комм.)

    Посмотрите пожалуйста. Правильно ли я сделал редирект на основной домен 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]

    Ответить
    • Игорь (3 комм.)

      Так сделал. Думаю так правильней.

      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]

      Ответить
  80. Владимир (1 комм.)

    Привет, АлаичЪ.

    Нужна помощь. На сайте www.eko-termo.ru переношу структуру с поддоменов на основной домен. Нужно прописать правила переадресации, чтобы все страницы оттуда показывали на все новые страницы. Также есть еще несколько сайтов, на которых нужно прописать подобные правила.

    Если сможешь помочь, конечно не бесплатно, напиши пожалуйста на мою почту. Буду благодарен.

    Ответить
  81. Саша (9 комм.)

    АлаичЪ подскажи почему при редиректе добавляются лишние символы (именно для 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 — это плохой признак. Вот вам и результат.

      Ответить
  82. Игорь (3 комм.)

    Подскажите пожалуйста, нужно ли ставить редирект 301, если я переименовал страницу. При переходе по ссылке из ПС ошибка 404.

    Ответить
    • АлаичЪ

      Да, обязательно нужно делать 301-редирект!

      Ответить
  83. Юрий (3 комм.)

    Добрый день!

    Подскажите, пожалуйста, как в .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

      Ответить
      • Юрий (3 комм.)

        Спасибо, обычно не отвечают в блогах. )

        Уже сделал вот так:

        RewriteRule ^shop/product/(.*)[/](.*)/genskaya-parfyumeriya/(.*)$ http://site.ru/shop/product/$2/$1.html [R=301,L]

        Мне просто надо было поменять местами цифры (id категории и товара).

        Только один вопрос, почему правило надо добавлять сразу после RewriteEngine On?

        Я вроде добавил после редиректа с www на без www и работает или я неправильно сделал?

        Ответить
        • АлаичЪ

          Советую изменить на мой вариант, он вернее и надежнее. Можно добавить код и после редиректа на основное зеркало, главное чтобы до основных правил ЧПУ добавлялось, а проще всего это объяснить как "сразу после RewriteEngine On" — точно никто не ошибется.

          Ответить
          • Юрий (3 комм.)

            Понял, а чтобы в вашем варианте цифры поменять местами, тоже достаточно поменять местами $1 и $2?

            RewriteRule ^shop/product/([0-9]+)/([0-9]+)/(.*)\.html$ http://aromashleyf.ru/shop/details/$2/$1.html [R=301,L]

            Ответить
  84. Даша (2 комм.)

    Пожалуйста, помогите со склейкой зеркал! уже убилась их склеивать. Прописывала и так:

    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

    Ответить
    • Даша (2 комм.)

      уфф, вроде заработало каким-то чудесным образом! сорри, вопрос снят ))

      а впрочем, буду рада,если вы подскажете, нужно ли избавляться от index.php в адресах страниц?

      Ответить
      • АлаичЪ

        Рад, что все работает.

        Да, избавиться от index.php стоит, если этот адрес дублирует главную страницу.

        Ответить
  85. Владимир (8 комм.)

    Подскажите, пожалуйста, как решить такую проблему.

    Раньше адрес товара был:

    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

    Возможно ли в этом случае сделать перенаправление?

    Заранее спасибо ))

    Ответить
    • Владимир (8 комм.)

      Перенаправление удалось организовать вот таким образом:

      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 из базы к ЧПУ названию.

        Ответить
        • Владимир (8 комм.)

          Понятно, спасибо.

          Возник еще один вопрос:

          Поменял ЧПУ псевдоним товара с tovar_name на tovar-name, но простое перенаправление в .htaccess типа

          Redirect 301 /tovar_name http://www.mysite.ru/tovar-name

          почему-то не работает.

          Не подскажете в чем может быть причина?

          Сколько не мучил поисковики, не нашел ни одной темы, где бы освещался подобный вопрос.

          Ответить
          • АлаичЪ

            Вот так попробуйте. Добавляйте после RewriteEngine On:

            RewriteRule ^tovar_name$ http://www.mysite.ru/tovar-name [R=301,L]
            Ответить
            • Владимир (8 комм.)

              Разместил сразу после RewriteEngine On. Выдает 500 Internal Server Error

              Ответить
              • АлаичЪ

                Окей, тогда так:

                RewriteRule ^tovar_name$ http://www.mysite.ru/tovar-name [R=301,L]

                Если все равно продолжится 500 ошибка, то других вариантов не знаю :(

                Ответить
                • Владимир (8 комм.)

                  Работает, спасибо огромное! ))

                  Ответить
  86. Light_And_Dark (2 комм.)

    У меня сайт созданный с помощью 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:

      RewriteRule ^(.*)/item/([0-9]+)-(.*).html$ http://www.site.com/$1/$3.html [R=301,L]
      Ответить
      • Оксана (2 комм.)

        спасибо большое. Вы все правильно поняли.

        Ответить
  87. Raimond (12 комм.)

    Помогите решить проблему! Поставил кнопку 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 ???

    Ответить
  88. Сергей (5 комм.)

    Здравствуйте! Подскажите пожалуйста, как сделать правильный редирект:

    http://site.ru/index.php на http://site.ru

    и одновременно чтобы работал редирект типа:

    http://site.ru/index.php/kontakty... на http://site.ru/kontakty... (kontakty — не статичный адрес, изменяется)

    Ответить
    • АлаичЪ

      А добавьте в .htaccess следующие строки:

      RewriteCond %{THE_REQUEST} ^[A-Z]{3,9} /index.php HTTP/
      RewriteRule ^index.php$ / [R=301,L]
      RewriteRule ^index.php/(.*)$ /$1 [R=301,L]
      Ответить
      • Сергей (5 комм.)

        В этом случае работает только первый вариант: с http://site.ru/index.php на http://site.ru

        Если набрать адрес http://site.ru/index.php/kontakty то редирект происходит на http://site.ru

        Во втором случае я как раз не пойму, как сделать редирект на http://site.ru/kontakty

        Ответить
        • АлаичЪ

          Ошибочка в коде, забыл переменную добавить. Код в комментарии выше обновил, проверьте его.

          Ответить
          • Сергей (5 комм.)

            Вот это уже работает! Супер! Спасибо большое!

            Ответить
  89. Ната (4 комм.)

    Спасибо за статью, многое удачно внедрено. Но вот с одной траблой провозилась весь день и так не смогла одолеть, подскажите, пожалуйста. Пытаюсь сделать редирект со страниц вида:

    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]

    как побороть эту беду? заранее спасибо

    Ответить
    • АлаичЪ

      Вы почти на правильном пути были, только вот знак $ в конце не надо было ставить. Т.е. вот так:

      RewriteCond %{QUERY_STRING} ^f=([0-9]+)
      RewriteRule ^(.*)/viewtopic.php $1 [R=301,L]

      Если вдруг в конце после редиректа останутся параметры в url, замените $1 на $1? (т.е. добавить знак вопроса необходимо).

      Ответить
      • Ната (4 комм.)

        Большое спасибо за ответ, но не сработало :( попробовала с "?" и без. вот пациент (может это что-то прояснит): http://edinorog.com.ua/viewtopic.php?f=3&t=11451

        Если поможет делу, могу остальной .htaccess показать

        Ответить
        • АлаичЪ

          Ничего это не проясняет, там ошибка 500.

          Ответить
          • Ната (4 комм.)

            Ну да. Ошибка 500 как-то мешает отредиректить страницы с ней на главную? Она не влияет на редирект?

            Ответить
            • Ната (4 комм.)

              скажите, пожалуйста, как-то можно отредиректить эти страницы? или я что-то не так делаю? или что нужно сделать, чтоб заработал описанный Вами редирект? заранее спасибо

              Ответить
  90. Георгий (6 комм.)

    Добрый день!

    Перенес сайт со старого движка на новый, но не могу настроить редирект, помогите пожалуйста. Беда какая-то.

    Старая ссылка http://site.ru/catalog.php?idcat=&idcat2=48&idcat3=&idtvr=8099

    Новая ссылка http://site.ru/vitek_wx-1101_winx_bloom_vafel_nitsa

    Заранее спасибо, Георгий.

    Ответить
    • АлаичЪ

      Только php. Обращайтесь к программистам, чтобы решили проблему, иначе никак.

      Ответить
      • Георгий (6 комм.)

        Доброе утро!

        Вы имеете ввиду нужно написать скрипт и .htaccess будет обращаться к нему?

        Ответить
        • АлаичЪ

          Нет, не совсем. На php пишется набор правил и соответствий, а в .htaccess обозначаются правила составления ЧПУ адресов (это не редиректы).

          Ответить
          • Георгий (6 комм.)

            Я просто уже сделал ЧПУ для всех ссылок, правда у меня их 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 раз =)

              Ответить
              • Георгий (6 комм.)

                Я в Excel все запрограммировал, настроить нужно всего одну строку — это не долго.

                Ща попробую)

                Правда php уже заказал)))

                Ответить
              • Георгий (6 комм.)

                Гениально, все работает)))

                Ответить
  91. Георгий (6 комм.)

    Еще раз здравствуйте!

    Настроил все 8 000 редиректов таким образом, как Вы написали. Если нужен будет обработчик, готов поделиться.

    Но если на сайт одновременно заходит несколько человек, то нагрузка на сайт возрастает и сайт уходит в 500 ошибку.

    Может, кто сталкивался с такой проблемой?

    Как настроить редирект такого кол-ва ссылок, чтобы не было такой нагрузки?

    Заранее спасибо.

    Ответить
  92. Василий (24 комм.)

    Добрый день. Очень полезная статья. Спасибо.

    Есть вопрос насчет редиректа 301 vs. 302

    Есть мультиязычный сайт с двумя языками, основной адрес site.com, языковые секции site.com/ru и site.com/en

    При заходе на site.com система должна перенаправить на языковую секцию (когда /ru, когда /en) — перенаправляю с 302 кодом, нет ли здесь ошибки?

    Еще раз спасибо

    Ответить
    • АлаичЪ

      Просто стоит понимать, что 301 — это постоянный редирект, в итоге он приводит к склейке страниц, а 302 — это временный редирект, подразумевается, что однажды он перестанет существовать, при этом поисковики не склеят страницы и будут продолжать индексировать обе страницы, вес передаваться не будет.

      Ответить
      • Василий (24 комм.)

        Да, теорию я знаю. Но как лучше это делать именно с практической точки зрения

        Ответить
  93. Владимир (8 комм.)

    У меня на одном из сайтов при анализе страниц (пост) в сеопульте показывает "Код ответа: 200 (Redirect: 302)" в пояснениях рекомендуют использовать 301 редирект. Делал все по вашим примерам.

    Ответить
    • АлаичЪ

      302 — временный редирект, веса не передает, потому и рекомендую использовать 301 редирект.

      По моим рекомендациям нигде не сказано про 302 редирект, это даже из заголовка видно. Значит что-то не так сделали.

      Ответить
  94. Тимур (3 комм.)

    Ребята, помогите.

    Сайт имел поддомен в виде инет-магазина и имел вид /shop И недавно данный поддомен перенесли на новый домен. Можно ли все ссылки которые ведут на /shop перекинуть на новый домен

    старый сайт dachama.ru/shop новый домен dachamax-shop.ru

    Как мне быть?

    Ответить
    • Василий (24 комм.)

      а) Прописать правила в .htaccess или конфиге nginx (в зависимости от того, какой используется веб сервер).

      б) Положить по старому адресу скрипт, который разберет адрес и отправит пользователя по новому адресу (есть немного ньюансов)

      Ответить
      • Тимур (3 комм.)

        есть такой файл .htaccess — я уже внес редирект 301 основного зеркала. а с переводом со старого сайта на новый не смог понять.

        А какой скрипт нужно ставить?

        Ответить
        • Василий (24 комм.)

          1. Структура сайта не поменялась? Только изменился домен?

          2. Это просто второй вариант, сделать все на чистом php. Первый вариант предпочтительней

          Ответить
          • Тимур (3 комм.)

            Василий, сможете подсказать какой код редиректа 301 нужно прописать?

            Ответить
            • Василий (24 комм.)

              напишите в mail@indapublic.ru

              Ответить
  95. Максим (5 комм.)

    А вот как поставить редирект на страницы с произвольными параметрами? Например site.ru/?qwerty123456 сервер отдает ответ HTTP/1.1 200 OK. Необходимо настроить ответ сервера HTTP/1.1 404 Not Found для подобных страниц. И вот вопрос! Как такое настроить?

    Ответить
    • Василий (24 комм.)

      Зависит от используемой платформы

      Ответить
      • Максим (5 комм.)

        В платформах не силен, но сайт дам — http://dieza-group.com.ua

        Буду очень признателен за подсказку...

        Ответить
        • Василий (24 комм.)

          Платформа — в том смысле, самописное это или использование сторонней CMS.

          Суть решения при обращении смотреть на параметры и отдавать 404. Через htaccess это не решить без описания всех корректных параметров

          Ответить
  96. Андрей (2 комм.)

    При смене движка сайта, как это сделать максимально безболезненно и незаметно для сео?

    Что делать в случаях если:

    1. Серьезно меняется структура сайта, внутренняя перелинковка, и т.п.

    2. Ссылки на страницы в основном остаются прежними.

    Ответить
    • АлаичЪ

      Чтобы там не менялось и не делалось, если меняются адреса, то должен стоять 301-редирект со старых адресов на новые. Как это сделать, подскажет и сделает только программист. Если будет редирект, то ничего страшного не случится о того, что будут стоять старые ссылки, если они будут перенаправлять на новые правильные адреса.

      Ответить
      • Андрей (2 комм.)

        к примеру, если будет 1000 старых ссылок, нужно вручную настраивать 301-редирект на 1000 новых? Это отдельно прописывать для каждой старой ссылки новую ссылку? Очень долгий и трудоемкий процесс. Того стоит если сайт действительно очень круто продвинут.

        Ответить
        • АлаичЪ

          Это не обязательно должно быть 1000 правил, если будет какая-то закономерность, которую можно описать регулярным выражением, то достаточно пары строк в .htaccess. Если нет, то всегда есть программист, который решит проблемы одной-двумя функциями на php.

          Ответить
  97. Павел (4 комм.)

    сайт доступен по ip адресу как сделать редирект на домен? у меня свой vps.

    пытался сделать с помощью такого правила

    RewriteCond %{HTTP_HOST} ^X\.X\.X\.X$ [NC]

    Rewriterule ^(.*)$ http://site.ru/$1 [R=301,L]

    но ничего не помогает

    Ответить
    • Василий (24 комм.)

      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)

      Ответить
      • Павел (4 комм.)

        спасибо Василий, а если наоборот, основной сайт без www

        Ответить
        • Василий (24 комм.)

          RewriteCond %{HTTP_HOST} ^www\.site\.ru [OR]

          RewriteCond %{HTTP_HOST} ^1\.2\.3\.4

          RewriteRule (.*) http://site.ru/$1 [R=301,L]

          Ответить
          • Василий (24 комм.)

            1.2.3.4 — это ваш айпи, разумеется

            Ответить
            • Павел (4 комм.)

              огромное спасибо Василий, заработало.

              Ответить
  98. Casper (2 комм.)

    Привет, данный код if (( $_SERVER['REQUEST_URI'], — 1, 1 ) == '/' ){

    $requested_url = rtrim ($requested_url, '/');

    header ("HTTP/1.0 301 Moved Permanently");

    header ('Location: '.$requested_url.'');

    die ("Redirect");

    } выдает ошибку а именно символ , только не смог разобраться с каким именно, помоги пожалуйста

    Ответить
  99. Александра (2 комм.)

    Доброй ночи! Помогите решить проблему. Нужно сделать редирект с http://molodayamamochka.ru/stati/itemlist/ на http://molodayamamochka.ru/stati.html

    И еще немного не в тему, но все же...как закрыть от индексации в роботсе ссылки типа http://molodayamamochka.ru/stati/ya-mama/item/6-немного-о-грудном-вскармливании/6-немного-о-грудном-вскармливании.html или же такие же, но все латиницей, редирект на верные ссылки стоит

    Заранее спасибо!

    Ответить
    • Евгений (3 комм.)

      Та же проблема, если в курсе кто подскажите ПЛЗ!!!

      Ответить
    • Василий (24 комм.)

      Насчет первого — я так понимаю, редирект уже стоит?

      Насчет второго — прописать Disallow в robots.txt

      Ответить
      • Александра (2 комм.)

        Да, в первом случае я просто прописала редирект со страницы на страницу, но остались дубли категорий такого вида

        http://molodayamamochka.ru/stati/muzhchina-i-zhenshchina.html?format=html

        http://molodayamamochka.ru/stati.html?format=html

        что делать с этим хвостом, не знаю, пробовала прописывать разные условия редиректа, не помогло...

        Может вы подскажете?

        а в роботсе уже все настроила, спасибо)

        Ответить
        • Василий (24 комм.)

          Напишите мне письмо на mail@indapublic.ru

          Ответить
  100. фаина (1 комм.)

    Подскажите программиста для написания PHP редиректа

    Ответить
    • Василий (24 комм.)

      Напишите на mail@indapublic.ru

      Ответить
  101. Евгений (3 комм.)

    Здравствуйте! Прекрасная статья)

    Мой вопрос в следующем, есть страница :

    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

    Перекопал все форумы, весь интернет и пока к сожалению не нашел ответа. Надеюсь на вашу помощь.

    С Уважением, Евгений.

    Ответить
    • Василий (24 комм.)

      CMS?

      Ответить
      • Евгений (3 комм.)

        CMS joomla

        Ответить
        • Василий (24 комм.)

          Попробуйте

          Redirect 301 /remont-noutbukov http://www.noutservice.ru/remont-noutbukov.html [L]

          Ответить
          • Василий (24 комм.)

            Наверное, возможно это решить в самой CMS, но я в ней не силен

            Ответить
  102. Sergius (2 комм.)

    У меня при вставке

    RewriteCond %{HTTP_HOST} ^www\.(.*) [NC]

    RewriteRule ^(.*)$ http://%1/$1 [R=301,L]

    Браузеры пишут, что происходит бесконечное перенаправление. Кто-нибудь знает в чем может быть проблема?

    Ответить
    • Василий (24 комм.)

      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 это ваш айпи (либо уберите строку если она вам не нужна)

      Ответить
  103. Николай (2 комм.)

    Подскажите, как сделать исключения для некоторых страниц старого сайта, с которого идет переадресация на новый?

    В .htaccess я прописал:

    Redirect 301 /index.html https://sites.google.com/site/skapatity/

    Теперь вводя адрес прежнего сайта http://school5.apatity.ru переадресация происходит, но мне нужно, чтобы открывался архив новостей старого сайта: http://school5.apatity.ru/news/ и еще некоторые разделы.

    Можно ли добавить исключения в .htaccess?

    Ответить
    • Василий (24 комм.)

      Пропишите правило выше редиректа

      Ответить
      • Николай (2 комм.)

        Правило — это еще одна строка Redirect или что-то иное?

        Ответить
        • Василий (24 комм.)

          Правило для обработки url типа http://school5.apatity.ru/news/ и других должно стоять выше чем правило редиректа. Как только сервер встретит правило, которое сработает, он прекратит выполнение (при наличии нужных флагов). Таким образом, вам не нужны исключения в .htaccess

          Ответить
  104. Константин (2 комм.)

    Почему только правильные сеошники? Да потому, что неправильные хуй забили на сайт клиента и, что вполне вероятно, даже не заходя на сайт, стали закупать ссылки – увы, это не редкость.

    Порвало, ради этого и написал комментарий...

    Ответить
  105. Александр (2 комм.)

    Доброго времени суток. Не поможете разобраться с проблемкой? Имеем сервер 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. Никаких сдвигов. ЧПУ реврайтятся как и положено, а вот с параметрами беда.

    Очень буду признателен за помощь.

    Ответить
    • Василий (24 комм.)

      server {

      listen 80;

      server_name example.com

      rewrite ^/(.*)$ http://example.ru/$1 permanent;

      }

      Ответить
      • Александр (2 комм.)

        Василий, спасибо огромное. Работает. А я в сторону $args копал, а оно оказывается все намного проще))

        Ответить
  106. Василий (4 комм.)

    Зашел сюда, чтобы вникнуть в Redirect 301, зачитался, спасибо за инфо. Но у меня такой вопрос: "Сколько htaccess файлов должно быть на сайте?" Обьясню почему спрашиваю: стал разбираться что у меня на сайте понаделали веб-мастера, раньше их не проверял, а доверял — теперь жалею об этой ошибке.

    у меня на сайте куча htaccess файлов:

    мойсайт.ру — htaccess

    мойсайт/новости.ру — свой htaccess

    мойсайт/форум.ру -свой htaccess, у админки форума еще свой. Сколько их должно быть? или как роботс.тхт должен быть только один в корне сайта?

    Ответить
    • Sergius (2 комм.)

      В каждой директории сайта может быть свой .htaccess, его же используют не только для того чтобы делать редиректы.

      Ответить
    • Василий (24 комм.)

      Абсолютно нормальная структура

      Ответить
  107. Василий (4 комм.)

    Прописан на сайте редирект главной страницы на раздел "Новости".

    В чем разница между 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]

    Ответить
    • АлаичЪ

      Я не знаю, для чего последние две строчки, это уже какие-то особенности вашего сайта.

      Просто редирект с главной на папку делается одной строкой:

      RewriteRule ^$ /news/ [R=301,L]

      В моем варианте стоит 301-редирект, можно использовать временный 302-редирект, просто заменив соответствующую цифру.

      Ответить
  108. Иван (1 комм.)

    А как отредактировать файл .htaccess так, чтобы параметры URL yandex, openstat и adwords «не резались»

    список переменных utm_source, _openstat=, from=, gclid=

    Исходный .htaccess

    RewriteEngine on
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^([^.]+)(?<!/)/$ /$1 [R=301,L]
    RewriteCond %{HTTP_HOST} ^www.(.*) [NC]
    RewriteRule ^(.*)$ http://%1/$1 [R=301,L]
    RewriteRule ^([A-Za-z0-9_-]+)/?$ /?item1=$1 [L,QSA]
    RewriteRule ^([A-Za-z0-9_-]+)/([A-Za-z0-9_-]+)/?$ /?item1=$1&item2=$2 [L,QSA]
    RewriteRule ^([A-Za-z0-9_-]+)/([A-Za-z0-9_-]+)/([A-Za-z0-9_-]+)/?$ /?item1=$1&item2=$2&item3=$3 [L,QSA]

    Заранее благодарю!

    Ответить
    • АлаичЪ

      Ничего не будет само резаться, если целенаправленно это не резать. Так что смотрите свой код, где отрезаются параметры и убирайте его. Или используйте условия:

      RewriteCond %{QUERY_STRING} !utm_source [OR]
      RewriteCond %{QUERY_STRING} !openstat [OR]
      RewriteCond %{QUERY_STRING} !from [OR]
      RewriteCond %{QUERY_STRING} !gclid
      Ответить
  109. Александр (1 комм.)

    Здравствуйте. А каким образом можно делать автоматический редирект при изменении адреса поста на новую страницу? Например было alaev.info/2012/страница1/, а стало alaev.info/2012/страница2/ или была страница alaev.info/2012/страница1/, а при изменении года стала alaev.info/2013/страница1/ и выскакивает 404 ошибка на предыдущей странице. Плагины не хочется использовать. Искал способы сделать через htaccess, но не нашел...

    Ответить
    • АлаичЪ

      Автоматически через htaccess это никак не сделать. Используйте плагины.

      Ответить
  110. Дмитрий (3 комм.)

    Функция, убирающая конечный слеш из 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-редирект на адрес без слеша. А наоборот поставить слеш, как?

    Ответить
    • АлаичЪ

      Это делается проще, чем вы думаете :)

      if ( ( $_SERVER['REQUEST_URI'], - 1, 1 ) !== '/' ) {
      	header("HTTP/1.0 301 Moved Permanently");
      	header("Location: $requested_url/");
      	die("Redirect");
      }
      Ответить
      • Дмитрий (3 комм.)

        А если можно так сделать, но не по всему сайту, а на одной определенной странице? Т.е, указать страницу, и если посититель на нее попал, то перенаправить на страницу со /

        А то у меня по сайту везде страницы со /, а эту страницу яшка проиндексировал без слеша, я уже и canonikal прописал, а изменений всё нет. А страничка у меня для поиска важная...

        Ответить
        • АлаичЪ

          Ну значит обычный редирект прописать:

          RewriteRule ^page/name$ http://site.ru/page/name/ [R=301,L]
          Ответить
          • Дмитрий (3 комм.)

            АлаичЪ

            У меня не получилось настроить редирет:

            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 слева, попробуем разобраться.

              Ответить
  111. Артем (2 комм.)

    Добрый день.

    При переносе сайта на новый домен прописали

    Options +FollowSymLinks

    RewriteEngine on

    RewriteRule (.*) http://www.NEWDOMEN.ru/$1 [R=301,L]

    все работает, НО картинки не редиректят...

    картинки на старом сайте отдают 200

    подскажите плиз, как прописать редирект, что бы все картинки .jpg .png .gif

    редиректили на главную нового домена

    спасибо заранее!

    Ответить
    • АлаичЪ

      Попробуйте:

      RewriteCond %{HTTP_HOST} ^www.olddomain.ru$ [NC]
      RewriteRule ^(.*)$ http://www.newdomain.ru/$1 [R=301,L]

      При этом должны и картинки редиректиться. Если не редиректятся...тогда хз.

      Ответить
      • Артем (2 комм.)

        не редиректяца(

        но все равно спасибо

        Ответить
  112. Берт (2 комм.)

    Добрый день...Я на сайте не использую суффикс .html, в адресе страниц...И при удалении одного или нескольких символов из адреса страницы (вплоть до ID-номера)...Страница все равно открывается...Как сделать, что бы подставлялись недостающие символы...???

    Ответить
    • АлаичЪ

      Это нельзя решить средствами htaccess, только php и только зная структуру движка. Обращайтесь к вашему программисту или разработчику CMS. Универсальных решений тут не бывает.

      Ответить
      • Берт (2 комм.)

        Добрый вечер...!!! Напротив, я думаю, что можно...Вы правильно поняли суть вопроса...????Берем адрес...К примеру...http://sait.ru/324-rabota-na-domy...Убираем последний символ...Открывается эта же страница, но без последнего символа...И так далее до ID номера...Если изменяешь Id...Отдается 404 страница...Я вижу на многих сайтах...При удалении символа и обновления страницы, символ добавляется...То есть адрес имеет исходный вид...

        Ответить
        • АлаичЪ

          Если думаете напротив — флаг в руки.

          А я еще раз повторю, что делается это не при помощи htaccess, а средствами php, путем сравнения текущего url страницы и url записанного в БД.

          Ответить
  113. Дмитрий (2 комм.)

    Александр, добрый день. Не могли бы помочь советом. Переделали сайт, поменялась структура url адресов. Как сделать редирект 301, к примеру, со страницы http://ippondesign.ru/?menu=comp на http://ippondesign.ru/kompaniya

    Проблема в том, что старый адрес содержит знак вопроса и редирект из-за этого не работает. Там все адреса на старом сайте были такого вида.

    Ответить
    • АлаичЪ

      Надо внимательнее читать, в посте не раз про параметры было сказано, а в комментариях еще большое.

      Попробуйте следующий вариант:

      RewriteCond %{QUERY_STRING} ^menu=comp [NC]
      RewriteRule (.*) http://ippondesign.ru/kompaniya? [R=301,L]
      Ответить
      • Дмитрий (2 комм.)

        Спасибо большое за помощь! Не дотюкал сам до такого :)

        Ответить
  114. Кирилл (1 комм.)

    Здравствуйте! Вопрос избитый и даже читая Вашу статью в конец запутался :( Помогите, пожалуйста, советом.

    Суть — есть трастовый ИМ в зоне .ru, купил домен с тем же названием в зоне .рф, необходимо склеить домен «сайт.рф» с основным доменом «www.site.ru».

    На домене «сайт.рф» пока даже не стоит заглушка (стоит ли её ставить, пока ПС клеит эти домены или можно обойтись?).

    А главное, как пошагово склеить эти 2 домена, что бы не потерять позиции, трафик и пузомерки на основном сайте www.site.ru (уточняю, домен с .рф просто необходимо сделать зеркалом).

    Итак, обойтись директивой хост на «сайт.рф» с указанием главного зеркала и добавить сайт в панели вембмасетров с указанием зеркала или лучше комплексно (наверняка) — директива хост+добавление сайта в панели вм с указанием зеркала+редирект 301 в .htaccess?

    Спасибо!

    Ответить
    • АлаичЪ

      Достаточно просто разместить .htaccess файл для сайт.рф а внутри:

        RewriteEngine On
        RewriteCond %{HTTP_HOST} !^site.ru$ [NC]
        RewriteRule ^(.*)$ http://site.ru/$1 [R=301,L]

      Все, больше ничего не надо делать.

      Ответить
  115. Вадим (3 комм.)

    Приветствую Вас!

    Возникла проблема после модернизации сайта...

    Пытаюсь убить неверные динамические ссылки типа: 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

    Может вы сможете помочь?

    ЗЫ

    С Наступающим Вас!!!

    Всех благ и благополучия!!!

    Ответить
    • Василий (24 комм.)

      маска с ier_info должна быть сначала, а kanji после. то есть куски перепутаны местами (правильность маски не проверял)

      Ответить
      • Vadim (3 комм.)

        К сожалению, если их поменять местами, то я получаю "Internal Server Error"...

        Ответить
        • Василий (24 комм.)

          Я не имел в виду просто менять местами конструкции. В RewriteRule сначала идет регулярное выражение на запрос (в вашем случае это ier_info.php) а затем адресат (в вашем случае это kanji).

          То есть RewriteRule ^kanji_ ([^/]*)\.html$ /ier_info.php?id=$1 [L] редиректит с kanji на ier_info (при правильности регулярки, я ее не проверял)

          Ответить
          • АлаичЪ

            Попробуйте такой вариант:

            RewriteCond %{QUERY_STRING} ^id=(.+)$
            RewriteRule ^(.*)/ier_info.php?(.*)$ $1/kanji_%1.html? [R=301,NC,L]
            Ответить
            • Vadim (3 комм.)

              При таком коде я получаю ошибку: The requested URL /ier_info.php was not found on this server.

              «Покрутил в руках» ваш код... В результате при таком написании все заработало корректно:

              RewriteCond %{QUERY_STRING} ^id=(.+)$
              RewriteRule ^(.*)ier_info.php?(.*)$  $1/kanji_%1.html?  [R=301,NC,L]

              Слеши почему то давали такой эффект... странно...

              Теперь запрос site.ru/ier_info.php?id=15 перенаправляет на site.ru/kanji_15.html

              Может кому тоже пригодится...

              Благодарю Вас за помощь!!!

              Ответить
  116. Людмила (2 комм.)

    Здравствуйте! Очень полезный материал, просто потрясающе. Думаю, уж Вы то мне точно поможете найти верное решение. Служба поддержки хостинга отослала в справочник, а там всё в общем... Мне срочно нужно сделать перенаправление из меню главной сайта (домен) на главную поддомена. Сайт на WP, поддомен нет. Директория поддомена где должна быть?- у меня не в папке publik (timeweb) домена, рядом. Что мне нужно поместить в файл htacces? Заранее благодарна, Людмила.

    PS: Не удивляйтесь моей дремучести — только принялась за все эти дела. Но у Вас на форуме можно хорошо просветиться. СПАСИБО. И с НОВЫМ ГОДОМ!!!! МИРА И БЛАГОПОЛУЧИЯ хозяину форума и всем форумчанам!

    Ответить
    • Василий (24 комм.)

      Поддомен уже настроен? У timeweb поддомены настраиваются через директории и перенаправления

      Ответить
      • АлаичЪ

        Вас не зря отправили в справочник, хотя могли бы и помочь, иначе, что они за поддержка. Но в общем, это настраивается у хостера где-то в панели, а не через файл htaccess. Так что ведите переписку с поддержкой, добейтесь помощи.

        Ответить
      • Людмила (2 комм.)

        С поддоменом всё в порядке, но сделать перенаправление с меню главной домена на поддомен до сих пор не могу.

        Ответить
  117. Андрей (4 комм.)

    Здравствуйте, уважаемый АлаичЪ!

    Столкнулся с проблемой настройки редиректа со старого домена 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 необходимо сделать следующим:

        RewriteEngine On
        RewriteCond %{HTTP_HOST} !^litoweb.ru$ [NC]
        RewriteRule ^(.*)$ http://litoweb.ru/$1 [R=301,L]

      Во-вторых, размещать файл надо именно в корне и нигде больше. Возможно, что доступ запрещен по причине того, что права на системные файлы не предоставлены пользователю ftp. Таким образом, должно помочь использование файлового менеджера через панель хостера, а не через ftp-клиент. Заходите через web-интерфейс, удаляете старый htaccess (если он существует) и заливаете новый.

      И дело в шляпе!

      Ответить
      • Андрей (4 комм.)

        Я начал там закачивать файл, а на странице появилось сообщение:

        Невозможно загрузить файл! Проверьте права доступа на сервере (по FTP измените CHMOD на 777)!

        А какой хостинг лучше всего выбрать? Должен ли он поддерживать PHP?

        Я допустил ошибку... Сейчас даже с хостинга Vexy.ru домен не открепляется целый день... На хостинге Vexy.ru какая-то лажа... там нельзя закачивать файлы в корневую папку...

        Ответить
        • АлаичЪ

          Я хз, попробуйте хостинг sweb.ru

          Ответить
          • Андрей (4 комм.)

            А там надо какой-нибудь сайт закачать потом в верхнюю директорию которого и закачать этот файл .htaccess?

            Ответить
            • АлаичЪ

              Я перестал понимать о чем идет речь, так что задайте вопрос в службу поддержки, они помогут. Но htaccess там можно заливать точно, это я знаю.

              Ответить
  118. Алексей (5 комм.)

    А не подскажете ответ на такую задачу http://купить-мед.рф/kupit-med-v-saratove.html и http://купить-мед.рф это одна и та же страница. redirect 301 не помогает, так как http://купить-мед.рф/kupit-med-v-saratove.html является категорией материалов и соответственно, при переадрессации 301 все материалы пропадают. Какое здесь должно быть решение???

    Ответить
    • АлаичЪ

      Закройте от индексации неугодную страницу, раз редирект не подходит.

      Ответить
  119. Александр (1 комм.)

    Доброго времени суток.

    Нужно, что бы в адресе вида site.ru/index.php исчезло index.php

    Прописываю все этого в .htaccess

    Попробовал в принципе все описанное выше и во многих других местах. Браузеры выдает ошибку -На этой странице обнаружена циклическая переадресация.

    Что не так? Как поправить?

    Помогите пожалуйста

    Ответить
    • АлаичЪ

      Как-то так можно попробовать прописать:

      RewriteCond %{THE_REQUEST} ^[A-Z]{3,9} /index.php HTTP/
      RewriteRule ^index.php$ / [R=301,L]
      Ответить
  120. Илья (2 комм.)

    Не могу не как сделать ридерект с http://мойсайт.ру/?page=4 на http://мойсайт.ру подскажите, все перепробовал, ничего не получается

    Ответить
    • АлаичЪ

      Ну так в посте же такой случай разбирается:

      RewriteCond %{QUERY_STRING} ^page= [NC]
      RewriteRule (.*) $1? [R=301,L]
      Ответить
  121. Григорий (1 комм.)

    Здравствуйте АлаичЪ, очень полезная статья! Но решения своей проблемы я не смог найти, в ввиду специфичности.

    Помогите пожалуйста:

    Имеется ссылка такого вида: http://www.site.ru/?kart=%D0%9D+%D0%81&amp;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

    Перепробовал кучу вариантов ничего не выходит. В ссылке которую нужно перенаправить имеется "&amp;" параметр, которого нет в ссылках рабочих, может как-то это использовать?

    Два дня об стену бьюсь. :(

    Ответить
  122. Богдан (2 комм.)

    Здравствуйте! Подскажите, как перенаправить site.com/ru на site.com. Спасибо

    Ответить
    • Илья (2 комм.)

      Redirect 301 /ru http://site.com

      Ответить
      • Богдан (2 комм.)

        Это уже проходил. Ответ сервера:

        Неверное перенаправление на странице.

        Firefox определил, что сервер перенаправляет запрос на этот адрес таким образом, что он никогда не завершится.

        Ответить
        • Евгенич (84 комм.)

          Значит у Вас циклический редирект. Проверяйте, какие еще правила работают и приводят к появлению закольцовки.

          Ответить
  123. Роман (1 комм.)

    Здравствуйте!

    Как повлияет на мой сайт редирект 301 на чужой сайт? То есть, на своём сайте я делаю редирект 301 с http://mysite.ru/link на http://xxxxxxx.com/?ref=xxxxx

    Редирект делается с помощью плагина. И в нем ещё можно выбрать другие варианты редиректа: 302 и 307.

    Ответить
    • АлаичЪ

      Лучше использовать в данном случае 302 редирект. По идее, если прокладка http://mysite.ru/link сделана только для редиректа и указывается там, где могла бы быть внешняя ссылка с реф.кодом, то страшного ничего не случится.

      Ответить
  124. Никита (1 комм.)

    Привет, АлаичЪ!

    Классная статья!

    Нашел тут то, что давно искал — функция удаляющая кусок из 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!

    Ответить
  125. Дмитий (4 комм.)

    Здравствуйте. Помогите настроить редирект.

    В наличии два сайта. Один на основном домене, другой на поддомене. На основном домене страница: 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 запретил индексацию всех страниц с основного домена.

    Конечно можно было бы чисто тупо удалить все с основного домена, залить другой сайт и ждать когда само по себе все рассосется, пауки выкинут из поиска не существующие страницы, синдексируют новые, но ведь это ни есть хорошо как я понимаю.

    Ответить
    • Дмитий (4 комм.)

      Вопрос отпал. Не знаю что было. Переустановил двиг, прописал редирек для всех страниц.

      Выдернул из гугл мастера и яндекса, и через Exel быстренько через функцию сцепить, слепил для каждой страницы редирект.

      Нормально перекидывает теперь.

      Ответить
  126. Виталий (1 комм.)

    При включении перенаправления URL все работает, но только в доске объявлений adsmager не возможно добавить объявление, пишет Invalid Token. Такая же ситуация и с другим компонентом, тоже не отправляет сообщения. Как только отключаю перенаправление и все работает

    Ответить
  127. svlank (2 комм.)

    Здравствуйте! Помогите разобраться, пожалуйста!

    Нужно 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]
      Ответить
      • svlank (2 комм.)

        RewriteCond %{HTTP_HOST} ^www\.(.*) [NC]

        RewriteRule ^(.*)$ http://www.%1/$1 [R=301,L]

        Простите, я не понимаю данную запись.

        Смысл? С www на www?

        Если это не слишком нагло, Вы не могли бы прописать мне редирект с конкретным поддоменом (что-то я в синтаксисе вязну после кучи попыток):

        реально sport.vitarad.ru

        нужно www.sport.vitarad.ru

        А может, это проделки хостера?

        Заранее благодарю!

        Ответить
        • АлаичЪ

          Ошибка в код затесалась, не добавил восклицательный знак :) Теперь код верный, можете пробовать.

          Ответить
  128. Алекс (45 комм.)

    А как настроить редирект в .htacсess с категории на стат. страницу в ДЛЕ?

    Пробовал так:

    Redirect 301 /cat1/ http://site.ru/stat1.html

    На выходе получилось http://site.ru/stat1.html?do=cat&category=cat1

    Лишний хвост "?do=cat&category=cat1" совсем не порадовал.

    Что не так сделал?

    Ответить
    • АлаичЪ

      Попробуй так:

      RewriteRule ^cat1/$ /stat1.html? [R=301,L]
      Ответить
      • Алекс (45 комм.)

        Молодец, спасибо!

        Теперь никаких хвостов.

        Ответить
  129. Василий (4 комм.)

    Помогите пожалуйста со склейкой и редиретом, надо:

    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 делать.

      Ответить
      • Василий (4 комм.)

        порекомендовать кого-нибудь можете? небезвозмездно, конечно :)

        Ответить
        • АлаичЪ

          Не могу, к сожалению. Вы же сами написали "В ближайщее время программисты доделают работу" — они и помогут, разве нет?

          PS А так, всегда fl.ru в помощь!

          Ответить
  130. Владимир (3 комм.)

    Здравствуйте!

    Подскажите пожалуйста с редиректом.

    Нужно убрать раздел из url

    т.е. что бы сайт.ру/меню/каталог/товар перенаправляло на сайт.ру/каталог/товар

    и например сайт.ру/меню/контакты на сайт.ру/контакты

    и так для всех страниц, т.е. везде нужно избавиться от /меню

    Ответить
    • АлаичЪ
      RewriteRule ^menu/(.+)$ $1 [R=301,L]
      Ответить
      • Владимир (3 комм.)

        К сожалению, не получается...

        Ответить
        • АлаичЪ

          Это не может не работать. Добавлять надо сразу после RewriteEngine On и не забыть заменить menu на нужное.

          Ответить
          • Владимир (3 комм.)

            Да я всё сделал, поменял структуру, удалил раздел menu, но при переходе по старой ссылке вместо редиректа на новую открывается такая страничка

            http://сайт.ru/home/host******/сайт.ru/htdocs/www/katalog/tovar/ и пишет что страница не найдена

            Ответить
            • АлаичЪ

              Значит надо добавить перед строкой редиректа такую строку: RewriteBase /

              Ответить
  131. Andrey (2 комм.)

    Приветствую. Большое СПС за статью.

    Прошу проверить:

    Требуется чтобы 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]

    Ответить
    • Andrey (2 комм.)

      Господа, попробовал вот такой вариант:

      RewriteRule ^woodnews?id=(.*)$ woodnews/?id=$1 [R=301,L]

      все равно не получается (видны обе страницы)

      Ответить
  132. Александр (3 комм.)

    Добрый день! Поменяли cms сайта, и встал вопрос о склеивании ссылок которые уже емею вес в ПС, но ссылки такого характера

    http://сайт.ru/?kresla-dlya-rukovoditelya,40

    нужно направить на

    http://сайт.ru/katalog/kresla-boss

    Я так понимаю это параметры: знак ? и ,40 — Но пока не смекнул как правильно настроить редирект

    Поможете, буду крайне благодарен!

    Ответить
    • АлаичЪ

      Как-то так должно быть:

      RewriteCond %{QUERY_STRING} ^kresla-dlya-rukovoditelya [NC]
      RewriteRule (.*) http://site.ru/katalog/kresla-boss? [R=301,L]
      Ответить
      • Александр (3 комм.)

        Большое тебе спасибо. Все работает!!!

        Ответить
  133. Олег (6 комм.)

    Добрый день!

    Спасибо за Вашу познавательную статью, есть 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 ?

    Заранее спасибо!

    Ответить
    • АлаичЪ

      Первый случай:

      RewriteCond %{QUERY_STRING} ^_utl_t= [NC]
      RewriteRule (.*) $1? [R=301,L]

      Второй случай:

      RewriteRule ^(.*)/reviews/$ $1 [R=301,L]
      Ответить
      • Олег (6 комм.)

        Не первый не второй примеры не помогли.

        Ответить
        • АлаичЪ

          Они не могут не помочь, тут не может быть вариантов. Напомню, что надо добавлять строки сразу после RewriteEngine On. Если и это не поможет, то причина не в неправильных правилах, которые я написал, а в чем-то другом (специфика движка, настройка сервера и т.д.)

          Ответить
          • Олег (6 комм.)

            Они уводят на страницы http://coolsochi.ru/home/v/vsesaiti/coolsochi/public_html/kanalnye-konditsionery/daikin/kanalnyy-konditsioner-daikin-fdmqn25cxvryn25cxv/ т.е. приписывается лишний путь home/v/vsesaiti/coolsochi/public_html/

            Ответить
            • АлаичЪ

              Добавьте перед правилами строку RewriteBase /

              Ответить
              • Олег (6 комм.)

                Спасибо! Перед правилами это строкой выше?

                PS Выдает ошибку (Internal Server Error), настройте пожалуйста, заплачу Вам.

                Ответить
                • АлаичЪ

                  Да, должно получиться:

                  RewriteEngine On
                  RewriteBase /
                  RewriteCond %{QUERY_STRING} ^_utl_t= [NC]
                  RewriteRule (.*) $1? [R=301,L]
                  RewriteRule ^(.*)/reviews/$ $1 [R=301,L]
                  Ответить
                  • Олег (6 комм.)

                    Отлично все заработало!

                    Спасибо! рад буду отблагодарить...

                    Ответить
  134. Сергей (5 комм.)

    Здравствуйте! Подскажите пожалуйста, как сделать редирект с

    site.ru/component/users/?view=registration на site.ru/register

    Ответить
    • АлаичЪ

      Вот так:

      RewriteCond %{QUERY_STRING} ^view=registration$ [NC]
      RewriteRule (.*) /register? [R=301,L]
      Ответить
      • Сергей (5 комм.)

        Спасибо! Работает! Супер!

        Ответить
  135. Марина (1 комм.)

    Добрый день! Подскажите в чем может быть проблема. Сделали 301 редирект со страниц старого сайта на новый, сохраняя домен со старого сайта.

    В результате — переход всех страниц выходит на Главную страницу, а не нужную.

    Что делать))? Помогите!

    Ответить
  136. Евгений (1 комм.)

    Добрый день!

    Я не сильный профи в редиректах, много искал в сети, но не нашел вот что:

    есть сайт 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

    Ответить
    • АлаичЪ

      Я не знаю, что вы там делали. Но описанный мной код:

      RewriteCond %{HTTP_HOST} ^www.(.*) [NC]
      RewriteRule ^(.*)$ http://%1/$1 [R=301,L]

      Работает без сбоев и редиректит все правильно. Используйте его, а свой существующий редирект удалите.

      Ответить
  137. Юрий (2 комм.)

    Добрый день! Огромное спасибо за статью — очень информативная!

    Не могли бы вы мне помочь с такой проблемой:

    при переносе сайта с Юкоза на ДЛЕ урлы привел в такой же вид как и на Юкозе были, но только в конце добавилось .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 надо добавить:

      RewriteCond %{REQUEST_URI} !.html$
      RewriteRule ^news/(.+) news/$1.html [R=301,L]
      Ответить
      • Юрий (2 комм.)

        Примного благодарен! Всё работает супер :)

        Ответить
  138. Борис (5 комм.)

    ДОбрый день, буду благодарен если подскажете, что прописать в .htaccess или тыкнете где это выше...все прочитал, но не нашел аналогичного запроса

    У меня есть страницы (их много) типа

    http://syte.ru/schools/french/item/latelier9 — основная страница

    дубль:

    http://syte.ru/schools/french/item/latelier9?category_id=90

    как сделать редирект на основную страницу, отрезав все начиная со знака ? — ?category_id=ХХ (ХХ разные цифры, дублей много)

    а то Яндекс выкинул из поиска 1000 моих страниц (((

    Ответить
    • АлаичЪ

      Читайте "Избавляемся от параметров или меток в адресе".

      Ответить
      • Борис (5 комм.)

        да я пробовал вариант из этого разделе

        RewriteCond %{QUERY_STRING} ^?category_id=[NC]

        RewriteRule (.*) $1? [R=301,L]

        ничего не получилось, сайт выдает ошибку и не работает вообще

        Ответить
        • АлаичЪ

          Потому что правильно вот так будет:

          RewriteCond %{QUERY_STRING} ^category_id= [NC]
          RewriteRule (.*) $1? [R=301,L]
          Ответить
          • Борис (5 комм.)

            спасибо, что помогаете!

            так тоже не работает, выкидывает на несуществующую страницу 404 http://syte.ru/home/c/cl105614/public_html/schools/french/item/latelier9

            Ответить
            • АлаичЪ

              Добавьте перед этими двумя строками такую: RewriteBase /

              Ответить
              • Борис (5 комм.)

                все работает )))) Спасибо вам огромное!!!!

                Ответить
  139. Артем (13 комм.)

    Привет АлаичЪ, подскажи как сделать, у меня сайт на 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]

    Ответить
    • АлаичЪ

      Как-то так должно быть:

      RewriteCond %{QUERY_STRING} ^hero=USYL [NC]
      RewriteRule (.*) http://сайт/раздел/новость.html? [R=301,L]
      Ответить
      • Артем (13 комм.)

        Работает, вставил в директорию warcraft, а не DLE. А если у меня много таких ссылок будет, так же писать?

        Ответить
        • АлаичЪ

          Да, много ссылок — много правил.

          Ответить
      • Артем (13 комм.)

        RewriteRule ^hero=USYL$ http://site.ru/раздел/новость.html [L]

        Так тоже работает, в чем отличие?

        Ответить
        • АлаичЪ

          Мой вариант более правильный :)

          Ответить
          • Артем (13 комм.)

            Большое спасибо еще раз, за помощь, я бы может сам сделал, просто делал это в корне :)

            Ответить
  140. Борис (5 комм.)

    Добрый день, еще один вопрос по редиректу: мне гугул сегодня прислал отчет о 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+хвост ((((

    Ответить
    • АлаичЪ
      RewriteBase /
      RewriteCond %{QUERY_STRING} ^task=callelement [NC]
      RewriteRule (.*) $1? [R=301,L]
      Ответить
  141. Элим (3 комм.)

    Добрый день АлаичЪ! У меня два вопроса: подскажите пжл после использования редиректов стали такие 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 /

      Ответить
      • Элим (3 комм.)

        А при редиректе страница сразу должна исчезнуть или нужно ждать индексации яндекса? Плюс раньше не было таких URL и на обычные страницы они нормальные именно на эти что делал редирект. Если не сложно киньте ссылку где посмотреть можно по поводу RewriteBase /

        Ответить
        • АлаичЪ

          Во избежание недоразумений, предлагаю все изменения откатить обратно до внесения правок. А то вероятно, что вы сделаете все только хуже не зная, как правильно делать и проверять результат.

          Ответить
  142. Алексей (1 комм.)

    Проблема такая у меня 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]

    Оно работает но как вы понимаете не универсально, а ваша модель вроде универсальна но почему-то не работает...

    Ответить
    • АлаичЪ

      Что значит универсально? Писать универсальные ридиректы не безопасно, надо решать конкретные проблемы.

      Универсально это вот (.+) — покрывает любые символы.

      Ответить
  143. Виталий (3 комм.)

    У меня вылезла такая проблема в поисковой выдаче 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 /

      Ответить
      • Виталий (3 комм.)

        добавил, только теперь перебрасывает на http://sua.com.ua/home/category/38-ustroystva-dlya-izgotovleniya-razbornih-modeley, а как можно убрать /home/ из url?

        пробую таким способом RewriteRule ^home/(.*)$ /$1 [R=302,L], не получается выскакивает ошибка 404

        Ответить
        • АлаичЪ

          Так тут дело уже не в редиректе, а в том, что движок такие страницы, которые вам надо не формирует, а точнее формирует по другим адресам, судя по всему. И тут необходимо саму систему построения ЧПУ в движке переделывать.

          Ответить
  144. Xardas (1 комм.)

    Здравствуйте, Скажите, правильна ли такая конструкция для редиректа с дубля главной страницы 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]

    Ответить
  145. Давид (9 комм.)

    Подскажите пожалуйста где я натупил, на некоторых страницах выскочила .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

    Заранее благодарен!

    Ответить
    • АлаичЪ

      Кусок файла мне ни о чем не говорит. Лучше скажите, что надо сделать то?

      Ответить
      • Давид (9 комм.)

        на некоторых страницах в поисковой выдаче выскочил .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?

        Ответить
        • АлаичЪ

          Ну вот как-то так должно быть в таком случае:

          RewriteCond %{REQUEST_FILENAME} !-f
          RewriteRule ^([^.]+).html$ $1 [R=301,L]
          Ответить
          • Давид (9 комм.)

            Спасибо, все работает.

            Ответить
            • Давид (9 комм.)

              Обнаружил в выдаче такую проблему 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:

                RewriteRule (.+)recommend $1? [R=301,L]
                Ответить
                • Давид (9 комм.)

                  Все хорошо, спасибо. А не подскажешь, у меня есть еще одна проблема которую я не могу решить. Как убрать дубли такого плана?

                  http://sonatamobel.com/tumby

                  http://sonatamobel.com/tumby/item/bt517

                  http://sonatamobel.com/krovati

                  http://sonatamobel.com/krovati/item/b109

                  Я в ручную попробовал их поклеить, но это 100 строк, возможно написать ворожение?

                  Ответить
                  • АлаичЪ
                    RewriteRule (.*)/item/b(.+)$ $1 [R=301,L]
                    Ответить
  146. Sonet (1 комм.)

    Помогите разобраться.

    Редирект :

    RewriteCond %{HTTP_HOST} ^www.сайт.me$ [NC]

    RewriteRule ^(.*)$ http://сайт.me/$1 [R=301,L]

    — работает отлично на главной странице, а вот на внутренних www не убирает. В чем проблемка может быть, и как ее исправить. Может где-то в папках есть еще один .htaccess, который мешает главному?

    Ответить
    • Надя (1 комм.)

      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.

      Ответить
  147. Алексей (5 комм.)

    У меня такая проблема. Нужно склеить 20 категорий типа (kategory-pechi, kategory-bani) с 20 категориями типа (pechi, bani) То есть, у одного типа категорий есть приставка (category) и для них нужно сделать редирект на аналогичную категорию, только без приставки. Возможно ли это сделать одним действием?

    Ответить
    • АлаичЪ
      RewriteRule (.*)category-(.*) $1$2 [R=301,L]
      Ответить
      • Алексей (5 комм.)

        Спасибо преогромное! Во всем разобрался, теперь все супер!

        Ответить
  148. Алексей (1 комм.)

    Доброй ночи!

    Есть сайт, который собирает поисковый трафик.

    Нужно, чтобы посетитель попадая на некоторые страницы сайта перенаправлялся на страницу другого сайта (или как вариант на страницу этого домена, на которой во фрейме будет страница другого домена). Самое главное, чтобы это никак не отразилось на продвижение в поисковиках этих страниц основного домена.

    Подскажите, пожалуйста, как это лучше реализовать?

    Заранее спасибо за помощь!

    Ответить
    • АлаичЪ

      >>> как это лучше реализовать ... чтобы это никак не отразилось на продвижение в поисковиках этих страниц основного домена.

      Никак!

      Ответить
  149. Владимир (1 комм.)

    Друзья подскажите как убрать лишние слеши после имени домена? Смотрю у многих на сайтах эта проблема существует или это не проблема?

    Например http://www.домен/товар.html открывается и при таком исполнении http://www.домен////товар.html

    У меня если один слеш поставить http://www.домен/ то все нормально он обрезается, а если написать вот так http://www.домен/// и так далее, то слэши не убераются.

    Кто знает как это решить в файле .htaccess

    Перерыл весь нет — много воды, а конкретного ответа нет.

    Ответить
    • АлаичЪ

      Не все перерыли значит, раз этот пост на форуме остался без внимания — http://talk.alaev.info/topic/544/

      Хотя там на примере DLE и не в htaccess, но можно указанный код применить, например, в файле index.php.

      Ответить
  150. Александр (1 комм.)

    Здравствуйте, не могу сделать редирект, как не пишу не получается

    Были ссылки вида

    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

    результат такой же.

    подскажите пожалуйста как правильно сделать запись?

    Ответить
  151. Олег (7 комм.)

    На хостинге сайта triz-krsk.ru прикреплен домен новаяпечь.рф

    файлы последнего находятся в папке public_html/xn--80adk3afi1dybxa.xn--p1ai/

    Проблема состоит в том, что при наборе в браузерной строке новаяпечь.рф выходит имя http://triz-krsk.ru/xn--80adk3afi1dybxa.xn--p1ai/

    Хостер говорит, что надо в htaccess прописать правила перенаправления, а потом файлы настройки сайта.

    Применил ст