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 (вот ссылка на него), но интернеты мне посоветовали обратить внимание именно на него. Если у вас есть варианты получше, пожалуйста, отпишитесь в комментариях.


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

Александр «АлаичЪ» Алаев
Александр «АлаичЪ» Алаев

Вот уже 18 лет я профессионально занимаюсь созданием и продвижением сайтов и 13 лет с удовольствием пишу в любимый блог. Создал заслужившие доверие в seo-сообществе программы FastTrust и ComparseR и известный сервис для проверки траста сайтов CheckTrust.ru.

В 2014 основал веб-студию «АлаичЪ и Ко» в Краснодаре: 1 место в рейтинге агентств интернет-маркетинга (Рейтинг Рунета), 2 место в рейтинге SEO-компаний (CMSmagazine), 12 место в рейтинге известность бренда SEO-компаний в России (SeoNews).

Выступаю на профильных конференциях (All In Top, SEO Conference, SEMPRO, Baltic Digital Days). Веду канал в telegram про seo и бизнес. SEO-специалист года 2019 и 2020 (Sape).

Ерунда и баянЪ!Зачет! Плюсую!
+35

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

30 000 руб.

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

45 000 руб.

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

5 000 руб./час

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

70 000 руб.

Я начал запись своего обучающего курса по seo-продвижению.

В каждом видео я разбираю какую-то одну важную тему, и делаю это последовательно, в порядке, подходящем для изучения с нуля. Видео выкладываются раз в неделю – по средам. Я думаю, весь курс будет состоять из 50-70 роликов, так до конца еще далеко, а значит самое время подписаться и начать изучение вместе со мной.

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

Комментарии: 959 Написать комментарий
  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 там можно заливать точно, это я знаю.

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

                Спасибо, АлаичЪ... ((

                Ответить
  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 прописать правила перенаправления, а потом файлы настройки сайта.

    Применил стандартные, но не помогло.

    #RewriteCond %{HTTP_HOST} .

    #RewriteCond %{HTTP_HOST} !^example-domain-please-change\.com [NC]

    #RewriteRule (.*) http://example-domain-please-change.com/$1 [R=301,L]

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

      Конечно не помогло, они же закомментированы. Знак решетки # означает комментарий. Уберите его во всех строках.

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

        Буду премного благодарен, если подскажете как записать. Сейчас в htaccess записано:

        RewriteEngine on

        Options -Indexes

        RewriteCond %{HTTP_HOST} .

        RewriteCond %{HTTP_HOST} !^triz-krsk\.ru [NC]

        RewriteRule (.*) http://triz-krsk.ru/$1 [R=301,L]

        # The Friendly URLs part

        RewriteCond %{REQUEST_FILENAME} !-f

        RewriteCond %{REQUEST_FILENAME} !-d

        RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]

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

          Замените то, что указали выше на это:

          Options -Indexes
          RewriteEngine on
          RewriteCond %{HTTP_HOST} !^xn--80adk3afi1dybxa.xn--p1ai [NC]
          RewriteRule (.*) http://xn--80adk3afi1dybxa.xn--p1ai/$1 [R=301,L]
          # The Friendly URLs part
          RewriteCond %{REQUEST_FILENAME} !-f
          RewriteCond %{REQUEST_FILENAME} !-d
          RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]
          Ответить
          • Олег (7 комм.)

            Заменил в htaccess, что лежит в папке public_html, результат при наборе в строке

            1. сайт новаяпечь.рф — в браузерной строке как надо.

            2. сайт triz-krsk.ru — в браузерной строке стал как новаяпечь.рф

            файлы этого сайта находятся в папке public_html

            В папке public_html/xn--80adk3afi1dybxa.xn--p1ai/ тоже есть свой htaccess :

            Options -Indexes

            Options +FollowSymlinks

            RewriteEngine On

            RewriteBase /

            # The Friendly URLs part

            RewriteCond %{REQUEST_FILENAME} !-f

            RewriteCond %{REQUEST_FILENAME} !-d

            RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]

            Может они конфликтуют?

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

              Я вообще нихрена не понял. Что надо-то сделать?

              Я понял, что надо сделать редирект с triz-krsk.ru на новаяпечь.рф. Если нет, то формулируйте вопрос корректно так, чтобы я его понял правильно.

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

                Привет AлаичЪ, большой тебе риспект, что помогаешь нуждающимся!

                Изложу суть яснее:

                1. На хосте находятся 2 сайта triz-krsk.ru (файлы лежат в public_html) и к нему прикреплен домен новая печь.рф (файлы лежат в public_html/xn--80adk3afi1dybxa.xn--p1ai/)

                2. Была проблема: при наборе "новаяпечь.рф" в строке браузера было http://triz-krsk.ru/xn--80adk3afi1dybxa.xn--p1ai/ Сайт triz-krsk.ru — отображался корректно.

                3. Добавил в htaccess, который лежит в папке public_html, ваши рекомендации:

                Options -Indexes

                RewriteEngine on

                RewriteCond %{HTTP_HOST} !^xn--80adk3afi1dybxa.xn--p1ai [NC]

                RewriteRule (.*) http://xn--80adk3afi1dybxa.xn--p1ai/$1 [R=301,L]

                # The Friendly URLs part

                RewriteCond %{REQUEST_FILENAME} !-f

                RewriteCond %{REQUEST_FILENAME} !-d

                RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]

                Проблема исчезла, но теперь появилась новая проблема:

                4. Сайт triz-krsk.ru редиректится на новаяпечь.рф

                5. Надо, чтобы при наборе triz-krsk.ru он же и появился — в строке надо triz-krsk.ru

                и при наборе новаяпечь.рф — в строке надо новаяпечь.рф (сейчас это есть).

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

                  Я не понимаю, что значит "к нему прикреплен домен". В моем понимании, это значит, что эти домены стали зеркалами, отображают одно и то же содержмое и должны быть склеены — то есть редиректиться к какому-то одному адресу.

                  Если же надо, чтобы по двум адресам отображался один и тот же сайт, но оба адреса были доступны, то надо убрать, то, что между строками # The Friendly URLs part и RewriteEngine on и все.

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

                    Это 2 разных сайта, абсолютно. В админке было "добавить домен", это не зеркало!

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

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

                    • Олег (7 комм.)

                      Надо по двум адресам, чтобы отображались 2 разных сайта (каждый по своему адресу).

                      применил рекомендацию.

                      Ура, вроде пашет!

                      ReSpect АлаичЪ!

  152. Олег (7 комм.)

    не подскажешь почему в мобильнике русское имя новаяпечь.рф отражается в строке как xn--80adk3afi1dybxa.xn--p1ai

    может потому, что не создана папка для использования на мобильниках?

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

      Потому что все адреса в браузере должны быть отображены латинскими символами. А вообще это Punycode — именно в таком виде воспринимаются кириллические имена доменов. Почитайте в Wiki, что такое "пуникод".

      Ответить
  153. Павел (1 комм.)

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

    Вот это правило отлично работает: RewriteRule ^(.*) index\.php$ $1 [R=301,L]

    Только есть у меня два каталога, в которых оно ломает работу скриптов. Как-то можно прописать исключение для правила, чтобы оно работало везде, кроме этих двух каталогов?

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

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

    Такая проблемка появилась-сайт проиндексовало и появились страницы-дубли с такими адресами: http://www.000010f8www.site.ru/ , http://www.w00003e38ww.site.ru, www.httpwww.site.ru и очень много других . Посоветуйте где искать проблему и что мне делать?

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

      Необходимо добавить в htaccess следующую конструкцию:

      RewriteCond %{HTTP_HOST} !^site.ru$ [NC]
      RewriteRule ^(.*)$ http://site.ru/$1 [R=301,L]

      Если основное зеркало у вас с www, то замените в конструкции site.ru на www.site.ru. Разумеется, вместо site надо писать имя своего домена.

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

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

        Хотел уточнить, где прописать эту конструкцию в htaccess (после # Редиректы)? И изза чего начало так индексить сайт? Перед этим был сменен ip адрес и изменялись DNS записи на хостинге. Может быть причина в этом?

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

          Надо добавить сразу же после строки RewriteEngine On

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

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

            Спасибо, все сделал как вы сказали.

            Ответить
  155. Andrey (1 комм.)

    Парни, подскажите пожалуйста, как убрать дублирование в урле слешей, например "http://site.ua/shop//cat/subcat/"

    Ответить
  156. Давид (9 комм.)

    Подскажи пожалуйста как убрать вот такие дубли?

    http://sonatamobel.com/?

    http://sonatamobel.com

    http://sonatamobel.com/krovati?

    http://sonatamobel.com/krovati

    Этот вопрос в конце url не мог появится из-за ошибок в .htaccess ?

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

      Не знаю, от чего могли появиться такие дубли, но вряд ли от .htaccess. Рекомендую справиться с ними при помощи canonical https://alaev.info/blog/post/4775

      Ответить
  157. Давид (9 комм.)

    А подскажи пожалуйста, почему при редиректе такого типа, перестает открываться админка http://site.com/administrator/ ???

    RewriteCond %{REQUEST_FILENAME} !-d

    RewriteCond %{REQUEST_URI} ^(.+)/$

    RewriteRule ^(.+)/$ /$1 [R=301,L]

    я так понимаю, где-то стоит переадресация?

    http://site.com/administrator

    http://site.com/administrator/

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

      Это и есть переадресация со страниц со слешем, на страницы без слеша.

      Если админка не требует ЧПУ, то можно в htaccess, который лежит в /administrator/ добавить строку RewriteEngine Off. Если там нет htaccess, то можно его создать с такой строкой.

      Ответить
      • Давид (9 комм.)

        Так оно же по умолчанию стоит RewriteEngine Off?

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

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

          По умолчанию применяются инструкции из htaccess лежащего в корне.

          Что делать, я уже сказал — создать htaccess со строкой RewriteEngine Off и положить в /administrator/

          Ответить
  158. Наталья (5 комм.)

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

    Прошу помощи в решении одного вопроса. В настройках permalink установлена структура http://имя_блога.by//%category%/%postname%.html... Да, именно с точкой в конце... А теперь есть проблема у автора блога, например, на Linkedin он не может опубликовать ссылку на статью — режется точка в конце url.

    Подскажите, плиз, каким кодом можно сделать редирект ссылок ряда страниц сайта, если изменить настройки (без точки после html).

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

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

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

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

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

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

      Эту строку надо добавить после RewriteEngine On.

      Я ведь правильно понял, что адреса имеют вид http://slite.by/somecat/postname.html. — и там одна точка на конце html? А то вы пишете про точку, а ставите сами три точки...

      Ответить
      • Наталья (5 комм.)

        Спасибо огромное.

        Да, конечно одна точка, это, наверное, ручки тряслись )))

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

        Ответить
        • Наталья (5 комм.)

          Я попробовала сделать на локальном хостинге редирект, вставила RewriteRule (.*)\.html\.$ $1.html [R=301,L] в .htacctss и поменяла в настройках адрес на без точки. Но когда я пробую подставить точку, то перенаправление у меня не работает, 404. Эту схему можно проверить на локальном хостинге?

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

            Вся информация сохранится, если речь идет о комментариях самого движка блога. Если комментарии от стороннего поставщика (Disqus, cacle, facebook, vk), то этого я знать не могу, надо проверять. По идее, проблем быть не должно, но обязательно все проверьте.

            Ответить
  159. Наталья (5 комм.)

    Александр, спасибо огромное за такую профессиональную помощь! Реально гора с плеч )) Все работает без проблем по вашим подсказкам.

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

    Здравствуйте! Есть основной сайт www.site.ru и еще один сайт www.second-one.ru , который лежит в папке Second в корне основного сайта. Проблема в том, что второй сайт со всем содержимым доступен еще по двум адресам www.site.ru/second/ и www.second-one.site.ru

    Как организовать редирект для всего содержимого, чтобы страницы типа www.site.ru/second/page1 и www.second-one.site.ru/page1 переадресовывались на соответствующие страницы www.second.ru/page1 ?

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

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

      Извиняюсь переадресовывать надо конечно же на www.second-one.ru/page1

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

        В htaccess для нужного сайта необходимо прописать:

        RewriteCond %{HTTP_HOST} !^www.second-one.ru [NC]
        RewriteRule ^(.*)$ http://www.second-one.ru/$1 [R=301,L]
        Ответить
        • Владимир (8 комм.)

          Спасибо! Но правило работает для главных страниц. А если сразу запрашиваешь что-нибудь типа www.site.ru/second/directory_1/page1, то выбрасывает на главную страницу, а хотелось бы получить www.second-one.ru/directoty_1/page1

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

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

            Ответить
  161. 533312 (1 комм.)

    Привет АлаичЪ, не знал куда написать, пишу сюда.

    вот пример, даже у тебя есть такое: https://alaev.info/?qwerty123456

    как редиректить такие страницы?

    Ответить
    • -naemnik- (1 комм.)

      +1, тоже актуально!

      http://site.ru/?qwerty123456

      Как редиректить такие страницы в nginx?

      Ответить
  162. Один не дома (7 комм.)

    Очень замечательная статья. Спасибо вам АлаичЪ. Подскажите как правильно поступить в следующей ситуации. на данный момент есть домен site.com, руководство хочет купить домен site.ru, site.kz, site.tj, site.kg. они говорят, типа чтобы сайт был виден во всех региональных выдачах поисковика гугл. контент будет выдаваться одним движком, короче на всех доменах будет один и тот же материал. Если яндекс склеит домены сам автоматически, то гугл за такое может сильно наказать или я не прав? и как быть в этом случае, чтобы в региональных выдачах также сайт присутствовал.

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

      Это неправильное решение, на мой взгляд. Да, во-первых, Яндекс склеит эти домены, они даже в индекс не попадут, скорее всего. Гугл проиндексирует, но это скорее нанесет вред, чем пользу для основного сайта, а выигрыша в ранжировании в регионах точно не даст.

      Тут конечно надо рассматривать конкретный сайт, но я бы сделал так. Присвоил бы сайту все интересующие регионы (добавив сайт в Яндекс Каталог) и продвигал как и прежде, а сайт бы ранжировался в регионах.

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

      PS А домены можно купить и сделать с них редирект на основной сайт, а потом их можно будет использовать в оффлайн рекламе, например.

      Ответить
      • Один не дома (7 комм.)

        Огромное спасибо АлаичЪ. Объясню главному шефу. Я так и думал, но тяжело же людям, которые далеки от поисковой оптимизации, объяснить что так делать нельзя. Наверное у меня нет дара убеждения, а в айти сфере это очень важно.

        Ответить
  163. Алишер (1 комм.)

    Не могли бы Вы подсказать (если возможно), как можно:

    а) Убрать расширения вэб-страниц (*.html | *.htm)

    б) Убрать слэеш "/" окончания (т.е. вид должен быть прим.: http://about.me/netlancer)

    в) Осуществлять (если даже вдруг набрать в адресной строке — с расширением) перенаправление, во избежании дублирования страниц ???

    Просто, найденная в интернете информация не помогает, нужно для моего сайта wpage.co (http://sitemagic.org/ -движок). Буду очень признателен

    Alisher_R.

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

    Добрый день!

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

    Чтобы убрать слеш в конце url — воспользовался такой вот структурой

    RewriteCond %{HTTP_HOST} !^\.localhost$ [NC]

    RewriteRule ^(.+[^/])/$ http://%{HTTP_HOST}/$1 [R=301,L]

    RewriteCond %{REQUEST_FILENAME} !\.(gif|jpg|png|jpeg|css|js|php|woff|ico)$ [NC]

    Но остались несколько страниц, на которых всё-таки должен быть слеш

    checkout/cart/ и еще несколько.

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

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

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

      Тогда надо добавить исключения для страниц, которые не надо редиректить, вот так:

      RewriteCond %{REQUEST_URI} !checkout/cart/$ [NC]
      Ответить
  165. Алексей (3 комм.)

    вот такая структура подошла

    RewriteCond %{REQUEST_URI} !^/checkout.*$

    Ответить
  166. Артем (13 комм.)

    Скажите пожалуйста, как на DLE сделать редирект с http на https, что бы мой сайт про http забыл на всегда.

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

      Вот такой код можно попробовать в htaccess добавить после RewriteEngine On

      RewriteCond %{SERVER_PORT} !^443$
      RewriteRule .* https://%{SERVER_NAME}%{REQUEST_URI} [R=301,L]
      Ответить
      • Артем (13 комм.)

        На этой странице обнаружена циклическая переадресация

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

          А в настройках в админке везде с https уже прописано все?

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

            Да, везде всё прописал, https работает отлично если набирать руками, без единой ошибки.

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

              Еще вариант:

              RewriteCond %{SERVER_PORT} =80
              RewriteRule ^(.*)$ https://%{SERVER_NAME}%{REQUEST_URI} [R=301,L]

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

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

                Блин, не работает, вы можете где-нибудь проверить, если у вас заработает значит это что-то или с сервером или сайтом.

                У меня свой сервер, сам себе хостер )

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

                  Не могу проверить. Если у вас nginx, то надо в его настройках прописывать это дело. У нас так.

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

                    Да, у меня связка apache2 (8080) + nginx (80). По настройке nginx не подскажите?

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

                      В файл /etc/nginx/nginx.conf добавить строки:

                      server {
                      listen 123.123.13.132;
                      server_name site.ru www.site.ru;
                      rewrite ^ https://$server_name$request_uri? permanent;
                      }

                      Замените только свой IP и домен.

                    • Артем (13 комм.)

                      Спасибо, работает, от поисковиков не будет санкций за редирект и правильно ли они будут выдачу выдавать, с https? И еще один вопрос не по теме, ссылки на сторонних ресурсах размещать с https или без разницы?

                    • АлаичЪ

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

  167. Владимир Чеботаревский (2 комм.)

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

    На моем сайте имеются такие дубли

    site.ru/

    site.ru/index.php

    По совету из статьи убрал их путем добавления в htaccess

    RewriteEngine on

    RewriteBase /

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

    Только я сделал не 301 редирект, а 403 как на хабрахабре http://habrahabr.ru/index.php

    Согласно справке яндекса

    https://help.yandex.ru/webmaster/error-dictionary/http-codes.xml

    Доступ к документу запрещен (получен код 403 Forbidden). Если вы хотите, чтобы страница индексировалась, необходимо разрешить доступ к ней.

    Что лучше в удалении дубля при index.php-проблеме ?

    Запрет доступа к дублю через 403 или 301 редирект ?

    С одной стороны 403 удобно тем, что доступ к дублю просто запрещен и поисковик по адресу с index.php содержимого для индексирования не получит. Но ведь можно же использовать 301 редирект.

    Что выбрать из двух способов?

    ps еще один удобный способ смотреть коды ответов, это утилита wget в линуксе.

    С уважением, Владимир.

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

      Если бы правильнее было использование ошибки 403 вместо 301 редиректа, то я бы так и советовал. Но я так не советую.

      Ответить
      • Владимир Чеботаревский (2 комм.)

        А почему не советуете 403 ?

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

          Потому что. Это ведь дубли, а дубли должны быть склеены. Все просто.

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

    Добрый день! У меня есть группа одежды в контакте. Я изменила адрес группы на более удобный. Поисковая система Google выдавала мою группу со старым адресом до сегодняшнего дня, сегодня — вообще ничего не выдает. Жаль — столько работы было, денег. Можно вас попросить устранить данную проблему. Спасибо.

    Ответить
  169. Один не дома (7 комм.)

    вопрос по dle. с помощью ваших полезнейших и нужных советов убрали у сайта index.php и избавились от дублей, но возникает другая проблема дубли выскакивают если ввести вот такую строчку. site.ru/?do=cat&category=news/. как решить проблему с редиректом на просто /news/.

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

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

    Кто может сталкивался с проблемой. Все страницы сайта,такие как site.ru/page/1 и так далее до бесконечности, к примеру site.ru/page/1123 дублируют главную страницу. Все эти страницы отдают 200 OK. Как прописать в .htaccess редирект на главную страницу, ведь образуются бесконечное количество дублей главной. Редирект с site.ru/page/ на site.ru я сделал, а что делать с цифрами, проблема. Заранее спасибо.

    Ответить
    • АлаичЪ
      RewriteRule (.*)page/([0-9]+) $1 [R=301,L]
      Ответить
  171. Анна (1 комм.)

    Здравствуйте, спасибо за статью, перелопатила интернет эта статья лучшая!

    Вопрос вот в чем, необходимо сделать редирект

    со страницы sait.ru/otdel/brend_proizvoditel.html (разные виды с БД) на sait.ru/brend_proizvoditel

    Спасибо заранее.

    помог частично вариант RewriteRule ^otdel/(.*).html$ /$1 [R=301,L]

    но он не совсем корректен, т.к. не указано что необходимо преобразовывать только по разновидностям брендов (т.к. существует еще разновидность по цвету). Можно ли как-то вводить переменную, которая берет значение из БД или есть способ проще?

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

      В таком случае это надо редирект на php делать. Обращайтесь к программистам за помощью.

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

    Добрый день!

    Столкнулся с такой проблемой, нужно убрать пагинацию страницы, то есть

    есть такой URL:

    http://my-site.ru/catalog/tovary-dlya-malyshey/2/

    а нужно что бы при переходе на эту страницу выводилось

    http://my-site.ru/catalog/tovary-dlya-malyshey/

    попробовал сделать так :

    <IfModule mod_rewrite.c>

    RewriteRule (.*)/catalog/(.*)([0-9]+) $1 [R=301,L]

    </IfModule>

    но не получилось, в чем ошибка?

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

    Здравствуйте. Спасибо за статью. Пока не могу осилить, может подскажете?

    У меня такой вариант. Заходят с Директа по ссылке

    http://site.ru/folder/name.php?a_aid=5265fbd55ae2d& и дальше еще куча параметров... они меняются. ?a_aid= постоянно.

    Можно ли обрезать всё что после name.php

    Если да, то как?

    Варианты в статье пробовал: "Избавляемся от параметров или меток в адресе" и "Пример избавления от параметров скрипта в url страницы" пока не получается.

    Размещаю .htaccess в папке folder

    Спасибо.

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

    Пытаюсь поставить 301 Redirect самым обычным способом, но он срабатывает только на главной странице, а на внутренних ссылается на страницу с 404 ошибкой. В htaccess стоит такой код

    <IfModule mod_rewrite.c>

    Options +FollowSymLinks

    RewriteEngine On

    RewriteCond %{REQUEST_FILENAME} !-f

    RewriteCond %{REQUEST_FILENAME} !-l

    RewriteCond %{REQUEST_FILENAME} !-d

    RewriteCond %{REQUEST_FILENAME} !/bitrix/urlrewrite.php$

    RewriteRule ^(.*)$ /bitrix/urlrewrite.php [L]

    RewriteRule .* — [E=REMOTE_USER:%{HTTP:Authorization}]

    </IfModule>

    я так понял, что он с ним конфликтует. Что тут можно сделать?

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

    Здравствуйте Александр. У меня к вам вопрос, я хочу поменять структуру блога, было: http://sait.ru/название_рубрики/post.html , а нужно сделать так: http://sait.ru/blog/название_рубрики/post.html

    Подскажите пожалуйста, как правильно сделать редирект? Я новичок во всем этом. Заранее благодарю.

    p.s блог на вордпресс

    Ответить
  176. Серж (1 комм.)

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

    Однако выглядели они так:

    мой сайт.рф/category

    внутренние ссылки выглядят что то вроде этого:

    http://xn----9sbwcjikbw8

    То есть поисковики воспринимают мои внутренние кириллические ссылки,как внешние.

    Однако,большинство ссылок все же осталось в виде xn----9sbwcjikbw8

    Так вот,как мне сделать редирект или вообще,что то сделать,что бы кириллические ссылки превратились в близкие любому поисковику закорючки xn----9sbwcjikbw8 ?

    Кстати гугл похоже разницы не заметил и сайт весь в индексе.

    Или гуглу все равно))

    PS

    сайт работает исправно,никаких косяков незмаечено,все дело похоже в этой кириллице.

    Ответить
  177. Рустам (1 комм.)

    Здравствуйте, у меня возникли сложности со штатным программистом. Необходима помощь. У нас на проекте http://kupilion.ru — есть модуль "Использовать ЧПУ (человеко-понятные урлы)" — при его включении — строка в браузере меняется вместо: http://kupilion.ru/action/555/3-chasa-igry-v-bouling-ili-bilyard-v-trk-namangan.html на http://kupilion.ru/razvlecheniya/bouling/3-chasa-igry-v-bouling-ili-bilyard-v-trk-namangan.html, все отлично если бы не два но: очень часто при регистрации нового пользователя или входа в систему (человек должен попасть в личный кабинет по адресу: http://kupilion.ru/my) — у него появляется ошибка 404. И второе — мы выгружаем акции на сайты партнеров через XML файл, там вообще ссылки формата: <url>http://kupilion.ru/action560.html</url>. Как можно сделать редирект или что то еще, что бы при переходе по ссылке: /action560.html — человек попадал именно на акцию, а не на ошибку 404 при включенном ЧПУ. Просьба помочь с моим вопросом.

    Ответить
  178. Юра (1 комм.)

    Пытаюсь сделать редирект .htaccess на новый домен:

    Redirect 301 /page-name.html http://new-site.ru/page-name.html

    Но перекидывает на http://new-site.rupage-name.html/

    Т.е. на выходе какой-то не правильный формат ссылки получается.

    Ответить
  179. Люда (1 комм.)

    Мне надо с http://belair-appliance-repair на http://www.belair-appliance-repair

    а потом убрать index.php

    Если так

    RewriteCond %{HTTP_HOST} ^belair-appliance-repair\.com$ [NC]

    RewriteRule ^(.*)$ http://www.belair-appliance-repair.com/$1 [R=301,L]

    то выскакивает 404

    поэтому я сделала

    RewriteCond %{HTTP_HOST} ^belair-appliance-repair\.com$ [NC]

    RewriteRule ^(.*)$ http://www.belair-appliance-repair.com/index\.php [R=301,L]

    А теперь убрать не получается index.php

    Пробовала варианты

    Redirect 301 http://www.belair-appliance-repair.com/index.php http://www.belair-appliance-repair.com

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

    RewriteRule ^index\.php$ / [R=301,L]

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

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

    RewriteRule ^index\.php$ / [R=301,L]

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

    Есть такие строчки у меня:

    RewriteCond %{REQUEST_URI} ^/[a-z]+_[A-Za-z0-9]+$

    RewriteRule ([a-z]+) _ ([A-Za-z0-9]+) /?$1=$2&%{QUERY_STRING}

    Благодаря им запрос в виде http://мойсайт.ru/id_15 остаётся в адресной строке, а гет-переменная id приобретает значение 15.

    Теперь мне нужно сделать так, чтобы все вызовы типа http://мойсайт.ru/?id=15 переходили на первый вариант так, чтобы менялась строка адреса, и чтобы это было именно 301 редирект.

    Перепробовал все варианты: либо не работает, либо говорится о бесконечном редиректе.

    Последний вариант (который не работал) был такой:

    RewriteCond %{REQUEST_URI} id=

    RewriteRule ^/\?id=([0-9]+)$ /id_$1 [R=302,L]

    Что не так?

    Ответить
  181. Людмила (1 комм.)

    Здравствуйте! Очень внушительная статья, да комменты почти каждый стоит отдельной статьи. Очень прошу помочь: открыла поддомен в папке сайта (сайт на CMS, а поддомен нет). По плану поддомен должен открываться как по своему собственному адресу, так и по адресу одной из страниц сайта. Написала редирект :

    RewriteEngine on

    RewriteBase /

    RewriteCond %{HTTP_HOST}^rogden\. doma-biznes-dohod.ru\.ru$

    RewriteCond %{REQUEST_URl}!/rogden/

    RewriteRule^(.*)$/rogden/$1[L]

    rogden\. doma-biznes-dohod.ru- директория поддомена далее через слэш с точкой — имя сайта.

    Ерунда получилась- открывается что по адресу сайта, что поддомена главная страница сайта (домена).

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

    Ответить
  182. Tatyana (1 комм.)

    Мне нужна помощь...

    я совсем запуталась с htaccess

    делаю вот так

    RewriteEngine On

    RewriteBase /

    RewriteRule ^index\.php$ — [L]

    # uploaded files

    RewriteRule ^([_0-9a-zA-Z-]+/)?files/(.+) wp-includes/ms-files.php?file=$2 [L]

    # add a trailing slash to /wp-admin

    RewriteRule ^([_0-9a-zA-Z-]+/)?wp-admin$ $1wp-admin/ [R=301,L]

    RewriteCond %{REQUEST_FILENAME} -f [OR]

    RewriteCond %{REQUEST_FILENAME} -d

    RewriteRule ^ — [L]

    RewriteRule ^[_0-9a-zA-Z-]+/(wp- (content|admin|includes).*) $1 [L]

    RewriteRule ^[_0-9a-zA-Z-]+/(.*\.php)$ $1 [L]

    RewriteRule . index.php [L]

    RewriteRule (.+)/feed /$1 [R=301,L]

    RewriteRule (.+)/comment-page /$1 [R=301,L]

    RewriteRule (.+)/trackback /$1 [R=301,L]

    RewriteRule (.+)/comments /$1 [R=301,L]

    RewriteRule (.+)/attachment /$1 [R=301,L]

    RewriteCond %{QUERY_STRING} ^attachment_id= [NC]

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

    RewriteRule (.+)/*more= /$1 [R=301,L]

    он ни фига не делает переадресацию

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

    Спасибо помогло, мне тут дали поколупать сайт на modx а я с ним не сталкивался ни разу, кинулся — мрак, тайтлов-дескрипшенов нет, главных две штуки, одна с html вторая без, в общем жесть, руки пообрывал бы, да некому, надо косяки исправлять, а я как назло с редиректом за всё время как-то не сталивался, нужды не было, всё программист решал, а тут самому пришлось, очень выручил, спасибо, всё работает

    Ответить
  184. Олег (1 комм.)

    Здравствуйте, Александр! Скорее мой комментарий малоинформативен. Однако, я обязан это поле замарать!!!

    Потому как в целом и по отдельности данная страница блога мне понравилась —

    профессионально и очень доступно.

    Спасибо, Александр за Вашу работу. Хотя сценарий:

    RewriteEngine On

    RewriteBase /

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

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

    у меня не сработал. Будем искать причины. Желаю здоровья и удач. Олег.

    Ответить
  185. Ярослав (1 комм.)

    Здрасьте. Помогите. Хотел прописать 301 на главную без index.php. Вставил код и теперь выдает вот такое http://moi_domen.ru/home/clients/yaroslav_ftp0/domains/moi_domen.ru/html/

    И еще. Помогите перенаправить страницы вида:

    http://moi_domen.ru/moya_category/%C2%BBhttp://moi_domen.ru/moya_category/moi-post.html%C2%BB

    Чет не получается у меня... Спасибо за помощь.

    Ответить
  186. Фёдор (1 комм.)

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

    Прописал следующее правило в .htaccess

    #RewriteCond %{HTTP_HOST} ^opencart\.v\-breste\.by$ [OR]

    #RewriteCond %{HTTP_HOST} ^www\.opencart\.v\-breste\.by$

    #RewriteRule ^kategorii\-tovarov\/$ "http\:\/\/opencart\.v\-breste\.by\/" [R=301,L]

    redirect /kategorii-tovarov/ /

    теперь с урла http://opencart.v-breste.by/kategorii-tovarov/mebel/самокат перенаправляет на урл http://opencart.v-breste.by/mebel/самокат?_route_=kategorii-tovarov/mebel/самокат а должен перенаправлять на http://opencart.v-breste.by/mebel/самокат

    Подскажите как убрать ?_route_=kategorii-tovarov/mebel/самокат в конце урла?

    И второй вопрос.

    В индексе много урлов с -detail на конце ссылки. На новой цмс планируем убрать из урла -detail

    Как редиректить с урла http://opencart.v-breste.by/kategorii-tovarov/mebel/самокат-detail на урл без -detail

    http://opencart.v-breste.by/mebel/самокат ?

    Спасибо за статью! Очень качественный материал.

    Ответить
  187. Игорь (1 комм.)

    Добрый день! Подскажите как реализовать редирект через htaccess со следующей задачей:

    301 редирект со страниц вида http://www.site.ru/selector/?cardid=102&sectionid=4 на страницу вида http://www.site.ru/selector/?sectionid=4&cardid=102

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

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

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

    У нас очень большой интернет-магазин. Раньше все адреса были не ЧПУ, заканчивались все на id№, не было нормальной структуры в URL.

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

    Подскажите, пожалуйста, как сделать редирект со всех страниц, содержащих /component/virtuemart/view/category/virtuemart_category_id/ на site.ru/katalog

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

    Единственная статья, в которой подробно все описана как для чайника (ибо таким являюсь я). В других статья даже нет описания в какое место файла ставить команду. А человеку не знающему, это очень важно. Спасибо, все прекрасно работает!!!

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

    Добрый день! Подскажите как правильно реализовать редирект через htaccess:

    http://site/category/index.html на http://site/category.html, http://site/category/index1.html на http://site/category1.html и т.д соответсвенно.

    И еще такой вариант- с http://site/category/ на http://site/category.html

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

    Огромное спасибо автору за материал. Очень все понятно и доходчиво написано. Но не смотря на это все же у меня есть загвоздка с такой задачей. Необходимо из ссылки — http://www.berkut-shop.ru/shoplite/zimnie_botinki/result.html?name=&idcat=6&price_min=&price_max=

    Сделать ссылку — http://www.berkut-shop.ru/zimnie_botinki/

    То есть выполнить два условия

    1е — убрать вставку после домена — shoplite/

    2е — убрать окончание — result.html?name=&idcat=6&price_min=&price_max=

    Возможно ли это?

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

      Можно вот такой конструкцией воспользоваться, должно помочь:

      RewriteCond %{QUERY_STRING} ^name= [NC]

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

      RewriteRule ^shoplite/zimnie_botinki/result.html$ zimnie_botinki/$1 [R=301,L]

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

        Не совсем верно я объяснил. Задача состоит в том, чтобы много таких алиасов перенаправить.

        То есть:

        http://www.berkut-shop.ru/shoplite/zimnie_botinki/result.html?name=&idcat=6&price_min=&price_max=

        http://www.berkut-shop.ru/shoplite/ochki/result.html?name=&idcat=6&price_min=&price_max=

        и т.д.

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

          Тогда так:

          RewriteCond %{QUERY_STRING} ^name= [NC]

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

          RewriteRule ^shoplite/(.*)/result.html$ $1 [R=301,L]

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

            Супер! Все работает! Только товары с формы:

            http://shop.ru/shoplite/telnyashki/tolstovka_s_kapyushonom_100_hlopok_detskie_i_vzroslye.html

            Не перенаправляются на форму:

            http://berkut-shop.ru/telnyashki/tolstovka_s_kapyushonom_100_hlopok_detskie_i_vzroslye.html

            В первом случае есть вставка — shoplite/

            А во втором ее нет.

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

              К написанным строчкам надо добавить еще одну:

              RewriteRule ^shoplite/(.*)\.html$ $1.html [R=301,L]

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

                Огромное Вам спасибо! Все получилось!

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

    Александр, приветствую!

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

    Изменил ЧПУ на работающем сайте (Joomla 2хх+ VM 2.0.26d) Суффиксы видишь ли мне не понравились, спасибо типо-сеошнику... Соттветственно огреб кучу дублей. Попытался исправить после прочтения вашей статьи кое-какие моменты. Но "каменный цветок" не выходит. Объясните "чайнику" пжл.!

    Дубль: http://mysite.su/bakterii-dlya-septikov/dlya-biotualetov/by,mf_name

    Эта страница(подкатегории) сейчас у меня на сайте : http://mysite.su/bakterii-dlya-septikov/dlya-biotualetov

    т.е. надобно сделать на нее редир.

    ЗЫ. У всех категорий и подкатегорий в конце адреса слэш/ не прописывается.

    Прописал в .htaccess:

    RewriteEngine On

    RewriteBase /

    RewriteCond %{HTTP_HOST} ^www.mysite.su$ [NC]

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

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

    RewriteRule ^index\.php$ http://mysite.su/ [R=301,L]

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

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

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

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

    RewriteCond %{QUERY_STRING} ^by,mf_name$

    RewriteRule ^(.*)\/\?(.*)$ $1\ [R=301,NC,L]

    Перехожу по ссылке на дубль: http://mysite.su/bakterii-dlya-septikov/dlya-biotualetov/by,mf_name

    редиректа нет!

    И если не трудно подскажите как сделать редирект с дублей страниц товаров в таком виде:

    http://mysite.su/bakterii-dlya-septikov/dlya-biotualetov/zhidkost-dlya-biotualetov-biola-1l-detail.html

    на

    http://mysite.su/bakterii-dlya-septikov/dlya-biotualetov/zhidkost-dlya-biotualetov-biola-1l.html

    ЗЫ. В ЧПУ я прописал суфф. для товаров .html

    Заранее премного благодарю!

    С уважением!

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

    Столкнулся с проблемой такого рода, помогите пожалуйста. Из-за слайдера на сайте, после доменного имени появляется абракадабра http://site.ru/#&panel1-2. Я так понимаю оно не несет никакого вреда, но все таки хотелось бы избавиться от этого. Пробовал склеивать с доменом, слайдер перестает работать. Возможно с помощью .htaccess избавиться от этой проблемы, или это jQuery и на него никак не повлиять?

    Ответить
  194. Жан (1 комм.)

    Здравствуйте! У меня такая проблема: я купил SSL и теперь мой сайт доступен только по такому адресу https://mysite.ru Мне нужен код редиректа для файла .htaccess чтобы со всех запросов типа: http://www.mysite.ru, www.mysite.ru, https://www.mysite.ru был переход на https://mysite.ru

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

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

      Обратитесь в техподдержку своего хостинга. Они помогут. Универсального кода нет.

      Ответить
  195. Паввел (1 комм.)

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

    Есть эта страница http://auto-maxi.com.ua/avtozapchasti-i-sh-tehnika/c-163.html

    И есть эта http://auto-maxi.com.ua/avtozapchasti-i-sh-tehnika/c-163.html?page=0

    В .htaccess я прописал

    RewriteCond %{REQUEST_URI} ^(.*)\&?page=0=

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

    Правильно?

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

    Options +FollowSymLinks

    RewriteEngine On

    RewriteCond %{HTTP_HOST} ^www.auto-maxi.com.ua/$ [NC]

    RewriteRule ^(.*)$ http://auto-maxi.com.ua/$1 [R=301,L]

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

      Если работает, значит правильно, если не работает — значит не правильно :)

      Ответить
  196. wlad (1 комм.)

    Добрый день. Когда-то у меня был сайт с доменом третьего уровня fasad.stroi-s.ru , но он был давно удален, а Яндекс все равно индексирует . Что делать?

    В robots.txt указать Disallow: /fasad/ ?

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

      Какое вам до него дело, если он был удален? Ничего не надо делать.

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

    Здравствуйте, АлаичЪ! Отличная статья для новичков и не только. Кое что знал, но вот не могу найти решения для такого рода дублей сайт.ру/? или сайт.ру/?abracadabra или так сайт.ру/страница/?abracadabra Т.е. ЛЮБЫЕ символы после вопросительного знака (без параметров). Как правильно настроить редирект, чтобы избавиться от ?abracadabra. Сайт на html. Какое правило прописать в .htaccess в этом случае?

    Ответить
  198. myhelpers (1 комм.)

    301 редирект для мультиязычного сайта на Joomla 3 c 303 редиректом

    Прошу помочь решить следующую насущную для мультиязычного сайта на Joomla 3 и, думаю, многих других CMS, проблему:

    При создании нескольких языковых версий сайта средствами мультиязычности самой CMS получается следующее:

    http://domain.ru — с русским языком

    http://domain.ru/ru/ — русская версия сайта (является основным языком сайта)

    http://domain.ru/en/ — английская версия сайта

    http://domain.ru/de/ — немецкая версия сайта

    и если средствами Joomla 3 удалять префикс /ru/ из адресной строки, то срабатывает 303 редирект, что есть нехорошо, т.к. для SEO нужен 301 редирект.

    Если же не убирать префикс в настройках Joomla 3, то будет существовать domain.ru/ru/ и domain.ru с русским языком, т.е. дубли.

    Как посредством .htaccess убрать префикс /ru/, т.е. сделать 301 редирект с domain.ru/ru/ -> domain.ru и чтобы в последующем переключение языков на сайте было корректным.

    В течение 2-x недель поиска информации в интернете опробовал разные куски кода в htaccess, но рабочего варианта так и не нашел.

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

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

      И всего-то надо сделать редирект domain.ru/ru/ -> domain.ru ? Это описано в самом посте выше:

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

      Ответить
  199. patjomkin (1 комм.)

    Добрый день.

    Перевёл один сайт с http на https (назовём его mywordpress.com (ec2 amazon, apache)).

    Но прям она главной странице есть форма заполнения http://otherdomain.com/subscribe (второй сервер ec2 amazon). Т.е. любой браузер сразу трубил что на странице имеются не секьюрные элементы ... . Через бд сменил http://sub.therdomain.com/subscribe на https://sub.otherdomain.com/subscribe. Предупреждение пропали. Но естественно форма не отрабатывает, так как для otherdomain.com нет https (и не планируется). После долгих чтений выяснил, что просто редирект на веб-сервере otherdomain.com не настроить, ибо он не сработает без валидных сертификатов.

    Есть только одно решение, использовать сервер-посредник с https. В моём случае на втором EC2 находится не только sub.otherdomain.com (http nginx) но main.otherdomain.com (https nginx). Что я хочу сделать: по клику по форме на сайте mywordpress.com запрос идёт на https://main.otherdomain.com/subscribe, а оттуда редирект на http://sub.otherdomain.com/subscribe. Как написать такой редирект для nginx? (бьюсь уже несколько часов). И, может есть более гуманное решение, а не гонять запрос через посредника?

    Ответить
  200. Игорь (7 комм.)

    Добрый день. По данному мануалу всё работало, но в последнее время что то не так, при проверки ответа сервера выдаёт Код статуса HTTP: "302 Found" Если сразу повторно запустить проверку то Код статуса HTTP: "200 OK" а если подождать пару минут то опять 302 в rookee при анализе сайта пишет что переадресация с обоих зеркал, где копать подскажите.

    Ответить
  201. Надежда (1 комм.)

    Гугл пишет, что на моем сайте много страниц с повторяющимся метаописанием типа

    Бусы из редких камней купить в интернет магазине

    /busyi/busyi-redkie-kamni/

    /busyi/busyi-redkie-kamni/?filter=p:39.0000///

    Я по Вашим советам добавила в .htaccess строки

    RewriteCond %{QUERY_STRING} ^filter= [NC]

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

    Правильно ли я сделала? Страницы так и не склеились.

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

      А редирект со второго адреса на первый происходит? Если да, то склейка — вопрос времени.

      Ответить
  202. Олег (6 комм.)

    Добрый день!

    Подскажите пожалуйста, как настроить редирект для /nastennye-konditsionery/aeronik/hm-mirror/"/ — что бы был без окончания ("/ )?

    CMS Shop-Script 5 — более 1000 страниц с подобным окончанием...

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

    Ответить
  203. Леонид (1 комм.)

    Добрый день, подскажите что сделать в стандартном .htaccess DLE чтобы метка =gclid не обрезалась для новостей? чтобы http://site/news?gclid=111 не редиректило на http://site/news .Заранее благодарен за ответ.

    Ответить
  204. Петр (3 комм.)

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

    Но я так и не могу исправить одну проблему(

    у меня щас редирект идет

    http://site.ru/blog/ на http://blog.site.ru/

    но тут меня попросили оставить один подраздел http://site.ru/blog/news/

    Как правильно прописать? Подскажите пожалуйста

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

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

      RewriteCond %{REQUEST_URI} !^/blog/news/ [NC]

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

        Пишу так

        RewriteCond %{REQUEST_URI} !^/blog/news/ [NC]

        RewriteRule ^blog/(.*) http://blog.site.ru/ [R=301,L]

        и не получается((

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

          все поправил

          слеша не хватало RewriteRule ^/blog/(.*) http://blog.site.ru/ [R=301,L]

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

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

    Спасибо за хорошую статью. Нашел то что нужно, применил, но есть небольшая проблемка:

    Необходимо исправить:

    site.com/tag/page на site.com/page

    В .htaccess прописал код:

    RewriteRule ^tag/(.*)$ /$1 [R=301,L]

    Редирект работает но проблема в том что в админ панель зайти после этого не возможно, выдает 404.

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

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

      Значит данное правило как-т касается url-адреса админ панели или чего-то сопутствующего.

      Какой адрес у админки?

      А еще как вариант попробуйте добавить коды редиректа в самый конец файла htaccess, вдруг он перебивает какие-то важные директивы.

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

    Добрый день, Александр!

    нужно сделать с site.ru/photo?tmpl=component на site.ru/photo

    Обычный 301 со страницы на страницу не помогает, как убрать этот хвост — ?tmpl=component , не подскажите?

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

      Подскажу. Читайте пункт "Избавляемся от параметров или меток в адресе".

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

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

    Прочитал от корки до корки с комментариями — свой случай не встретил.

    У меня вордпресс. В вебмастере Гугла дублей нет. В вебмастере Яндекса у некоторых страниц сайта по 30 и более дублей.

    Основная страница выглядит так: site.ru/page1/

    Дубли выглядят примерно так site.ru/page1/9223372036854775670/

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

    Ответить
  208. praktik_man (3 комм.)

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

    Нужен редирект с http://www.сайт.ру/ua/photo/1 (2,3,4...).html на одну категорию — /ua/gallery/photo-gallery.html

    При всех примерах, часа 2 уже делаю не могу понять как сделать редирект (((

    В скобках (2,3,4...) — это может быть страница 1.html, 2.html и т.д.

    Ответить
  209. Anton (1 комм.)

    Привет, сделал все как в мануале — у меня сайт на DLE с www.plusing.ru он не делает редирект на http://plusing.ru в чем может быть причина? :( Например у wordpress все просто указал какой домен указывать, то и показывает.

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

    Добрый день! Оказался в руках сайт с позорнейшими урлами типа:

    http://astralnalog-spb.ru/news/proshhaj, -kruglaya-pechat-%E2%80%94-zdravstvuj, -elektronnaya-podpis!

    В общем, все знаки препинания, которые присутствуют в заголовке, есть и в урле.

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

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

      Это делается точно не на уровне редиректов, это надо механизм формирования url пересматривать, а это уже совсем другая история.

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

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

        Ответить
  211. any_key (1 комм.)

    привет, есть такие страницы на сайте:

    http://www.site.ru/rubrika/file1/ и http://www.site.ru/file1/

    страницы одинаковые , это дубли. Если написать что-то типа: http://www.site.ru/фыФЫASDsdsaasd/file1/ страница все равно будет доступна

    Вопрос, как избавиться от дублей? сайт на ВП

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

    Добрый вечер!

    Нигде не нашел решение, помогите пожалуйста, сайт использует ЧПУ и нужно если сайт вводят с www, происходил редирект с сохранением строки после слеша, т.е. вводим www.сайт.рф/каталог должен произойти на сайт.рф/каталог Сейчас у меня переходит на сайт.рф/index.php

    Приведу мой htaccess:

    RewriteEngine on

    RewriteCond %{REQUEST_FILENAME} !-f

    RewriteCond %{REQUEST_FILENAME} !-d

    RewriteRule ^(.*)$ index.php?%{QUERY_STRING} [L]

    RewriteCond %{HTTP_HOST} ^www\.(.*) [NC]

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

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

      Перенесите строки

      RewriteCond %{HTTP_HOST} ^www\.(.*) [NC]

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

      сразу же под строку RewriteEngine On

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

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

    Очень нужна Ваша помощь или же скорее консультация. В панели гугла в дублях висит адрес site.ru/&, который дублирует главную страницу. Хотелось бы узнать можно ли как-кто от него избавится? Редиректом, на сколько я понял из Вашей статьи, не выйдет, ибо стоит этот амперсанд.

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

    Ответить
  214. JET (1 комм.)

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

    Интересует вопрос.

    Возможно ли сделать в .htaccess переадресацию только для конкретного URL и для конкретных пользователей некоторых стран.

    Пример: есть ли пользователь c других стран открывает ссылку test.ru/test.html то активируется переадресация на test.com/infopage.html, а ест ли с россии, то переадресация не действует и открывается сам test.ru/test.html

    С уважением

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

      Думаю, это как-то возможно, но я с этим не помогу, т.к. не знаю как это реализовать.

      Ответить
  215. Вика (3 комм.)

    Скажите, пожалуйста, как сделать редирект с site.ru/index.php/ на site.ru

    На всех сайтах dle — это возможно и это дубль, но нигде это не учитывается.

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

      Как-то так:

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

      Ответить
  216. sensey (3 комм.)

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

    Есть страницы вида http://site.ru/categor/statja.html%3Fstart%3D5 нужно, чтобы все страницы с окончанием этого вида %3Fstart%3D5 редиректились на страницы с окончанием ?start=5 , то есть чтобы адрес стал http://site.ru/categor/statja.html?start=5

    Подскажите как справиться?

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

    Подскажите пожалуйста. В htaccess самой cms имеются такие настройки

    RewriteBase /

    RewriteRule ^sitemap.xml$ index.php?route=feed/google_sitemap [L]

    RewriteRule ^googlebase.xml$ index.php?route=feed/google_base [L]

    RewriteRule ^download/(.*) /index.php?route=error/not_found [L]

    RewriteCond %{REQUEST_FILENAME} !-f

    RewriteCond %{REQUEST_FILENAME} !-d

    RewriteCond %{REQUEST_URI} !.*\.(ico|gif|jpg|jpeg|png|js|css)

    RewriteRule ^([^?]*) index.php?_route_=$1 [L,QSA]

    RewriteCond %{HTTP_HOST} ^www\.(.*) [NC]

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

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

    RewriteRule ^index\.html$ / [R=301,L]

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

    RewriteRule ^index\.php$ / [R=301,L]

    RewriteCond %{QUERY_STRING} ^route=common/home$

    RewriteCond %{REQUEST_METHOD} !^POST$

    RewriteRule ^index\.php$ http://%{HTTP_HOST}? [R=301,L]

    Есть какой-нибудь шанс сделать редирект страниц вида:

    Redirect 301 /catalog/index.php?SECTION_ID=84&SHOWALL_1=1 http://nordmodyl.ru/tehnologicheskie-boksy/

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

    ДД! Спасибо за инфо, но у меня есть два вопроса:

    1.Есть ли возможность убрать дубли такого типа /??? , /%АО и пр. невероятной ерунды? Понятно, что можно в роботс попытаться закрыться, но кушает ли Гуглбот этот роботс...неизвестно...

    Ваш вариант

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

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

    не подходит ( т е попытки вставить ? или % вместо &post= не прокатили) — сайт на Joomla 3.4

    Судя по Вашему блогу вероятно нет? https://alaev.info/????? показывает, что дубль есть ...но Вы даже index.php почему-то не стали убирать на своем блоге — а почему??? в этом есть какой-то подвох????)))) Объясните народу плз!))))

    2. Если я все-таки убираю дубль index.php в htaccess. да еще впридачу на всяк случ. в роботс пропишу дизалоу index.php не будет ли это чересчур??? Joomla автоматом проставляет canonical ...site.ru/index.php — т.е. получается мы дублем обозначаем страницу которая и есть canonical ...Как вариант, я вручную убрала canonical закомментировав нужные строчки, но вопрос остался...надо все-таки index.php как дубль убирать или нет...??

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

    Ответить
  219. Юлия (1 комм.)

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

    Имеется сайт на 1С Битрикс

    Подскажите, пожалуйста, как настроить редирект со страниц типа http://site.ru/news/300/60839

    на

    http://site.ru/news/300/segodnya-nochyu-spasateli-likvidirovali-pozhar-v-metallostroe/

    где 300 — это ID раздела

    60839 — ID элемента с символьным кодом segodnya-nochyu-spasateli-likvidirovali-pozhar-v-metallostroe.

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

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

      Без программиста никак. Это точно не через htaccess делается.

      Ответить
  220. Надежда Давыдова (1 комм.)

    Здравствуйте! Остается все-таки нерешенным вопрос: как сделать редирект с любой абракадабры, которую можно добавить через "?" к URL главной страницы, рубрики, тегов, на именно эти страницы... Иначе сайт становится уязвимым для злоумышленников. Помогите!

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

      Это решается добавлением на страницу тега rel="canonical". Можете прочитать об этом тут https://alaev.info/blog/post/4775

      Ответить
  221. vlad (1 комм.)

    Здравствуйте. Прописал постраничный редирект 301 в .htacсess вида:

    Redirect 301 /oldpage.html http://mysite.com/newpage.html

    Но при вводе в браузер старой страницы http://mysite.com//oldpage.html редиректится на http://mysite.com/newpage.html?newsid=96 (?newsid=число) Скажите пожалуйста как мне решить эту проблему?

    Сайт на DLE, ЧПУ первого типа.

    Ответить
  222. Татьяна (5 комм.)

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

    У нас дубли страниц пагинации в гугле. Прописали по вашим рекомендациям в этой статье 301 редирект в .htaccess.

    Вопрос: нужно ли теперь удалить из robots.txt ранее добавленную туда строку Disallow: /*offset= или после простановки редиректа это уже значения не имеет или наоборот нужно открыть? Если нужно открыть, вопрос как это сделать только для гугла.

    С яндексом у нас все в порядке.

    Спасибо.

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

      После редиректа надо снять запрет на индексацию, так что удаляйте строку.

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

    Хочу поделиться статьей по редиректу с несуществующих страниц для сайтов на 1с Битрикс http://thisis-blog.ru/redirect-v-bitrix/

    Ответить
  224. Татьяна (5 комм.)

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

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

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

    RewriteCond %{REQUEST_URI} ^(.*)\?action=

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

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

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

    RewriteCond %{REQUEST_URI} ^(.*)\?forum_ext=

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

    Смотрим как Googlebot и видим:

    <p>The document has moved <a href="http://femina-maskulina.ru/http:/femina-maskulina.ru/katalog-statej/muzhskaja-tema/moda-i-krasota-54/dublenki-muzhskie-dlja-2012-goda?offset=10">here</a>.</p>

    Т.е. редирект туда же, а должен быть на страницу без ?offset=

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

      Думаю, вам надо использовать не REQUEST_URI, а QUERY_STRING, все же с параметрами работаем.

      В моем посте описано про редирект с параметров.

      Ответить
      • Татьяна (5 комм.)

        Но у нас нет .php . У нас есть только окончание урла статьи, причем у каждой статьи он свой.

        RewriteCond %{QUERY_STRING} ^lang=ru$

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

        На что здесь изменить .php ?

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

          Ну и что, что нет php! Попробуйте так:

          RewriteCond %{QUERY_STRING} (offset|action|catid|forum_ext)=

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

          Ответить
          • Татьяна (5 комм.)

            Не помогло. 404 выдает. Перенаправления не происходит.

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

              Давайте тогда для url с одним параметром action попробуем:

              RewriteCond %{QUERY_STRING} ^action=

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

              Ответить
              • Татьяна (5 комм.)

                При попытке проверить перенаправление перебрасывает на это:

                404: Запрошенная страница с адресом [http://femina-maskulina.ru/home/i/ianv36/ianv36.bget.ru/public_html/katalog-statej/muzhskaja-tema/moda-i-krasota-54/dublenki-muzhskie-dlja-2012-goda] не найдена.

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

                  Добавьте строчку

                  RewriteBase /

                  после строки RewriteEngine On

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

    Добрый день всем ВМ)

    Почитал тему, что то свою проблему не нашел(

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

    например http://sait.ru/mail-agent/9-afisha/12-torty-na-zakaz-pirozhnye — где 12 ид материала

    Как сделать чтобы без писанины после ид, вот так: http://sait.ru/mail-agent/9-afisha/12

    Заранее спс!

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

      Это вам не в тему про редиректы, а на форум поддержки Джумлы.

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

        да, нет...что в этом направление — но не это)))

        RewriteRule ^([a-z\-])/([0-9a-z\-])/([0-9]) — (.*)$ /$1/$2/$3 [L]

        Ответить
  226. sensey (3 комм.)

    АлаичЪ, будьте добры, помогите с моей проблемой. Продублирую еще раз.

    Есть страницы вида http://site.ru/categor/statja.html%3Fstart%3D5 нужно, чтобы все страницы с окончанием этого вида %3Fstart%3D5 редиректились на страницы с окончанием ?start=5 , то есть чтобы адрес стал http://site.ru/categor/statja.html?start=5

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

    Добрый день.

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

    Вот что написано в моем .htaccess

    # BEGIN WordPress

    <IfModule mod_rewrite.c>

    RewriteRule ^index\.php$ — [L]

    RewriteCond %{REQUEST_FILENAME} !-f

    RewriteCond %{REQUEST_FILENAME} !-d

    RewriteRule . /index.php [L]

    </IfModule>

    Проверяю, переадресация вроде работает, т.е при наборе site.ru/, www.site.ru, site.ru/index.php и т.д. в строке браузера появляется site.ru. Т.е. для переадресации такой записи в .htaccess достаточно или я что-то не понимаю?

    Спасибо.

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

      Если работает, значит все нормально. Вопрос-то в чем состоял?

      Вообще для редиректов с индексных файлов а после есть описание "Самый популярный случай — редирект с index.php (html) на главную страницу" — смотрите его.

      То, что вы написали выше, оно только для WordPress.

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

    Здравствуйте! Помогите пожалуйста.

    Хочу сделать редирект со всех страниц типа:

    http://promstanok.com/product1.html\

    http://promstanok.com/product2.html\

    http://promstanok.com/product***.html\

    на главную страницу http://promstanok.com/

    Если пишу вот так, то ничего не изменяется:

    RewriteBase /

    RewriteCond %{QUERY_STRING} ^product [NC]

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

    Вот так вообще Internal Server Error:

    RewriteBase /

    RewriteCond %{QUERY_STRING} ^(.*)\product [NC]

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

    Спасибо!

    Ответить
  229. Ярослав (2 комм.)

    У меня такой вопрос: если я сменю чпу с тип-2 на тип-1, нужен ли мне редирект, чтобы поисковик склеил тип-2 (домен/категория/пост) с тип-1 (домен/пост) или ДЛЕ автоматически будет исправлять эту ошибку? Если нужен редирект, тогда прошу помощи, как правильно задать параметры. Спасибо

    Ответить
  230. Роман (1 комм.)

    Интересная тут обсуждается тема.

    Разрешите и мне вписать свои несколько строк...

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

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

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

    С уважением!

    Ответить
  231. Zhanina (2 комм.)

    Добрый день!

    Просмотрела комментарии в надежде найти свой случай, но тщетно.

    Помогите, пожалуйста, удалить дубли (аж целых 6 штук!) на главную с таким адресом: site.ru/aklazy=step&nonce= и дальше абракадабра.

    Как избавиться от этого aklazy=step&nonce=?

    Параметр aklazy в Search Console Гугла запретила. Без толку.

    Сайт на Joomla.

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

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

      Я извиняюсь, неправильно написала адрес дубля. Он выглядит так: site.ru/index.php?aklazy=step&nonce= и так далее

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

        Пробуйте так.

        RewriteCond %{QUERY_STRING} ^aklazy= [NC]

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

        Ответить
  232. mans0n (2 комм.)

    Ребята помогите плиз. Есть два купленных домена, они прикручены к DNS'ам на домашний роутер с статическим IP. На роутере маршрутами по портам прокинуты на домашний сервер Synology там раскручены виртуальные хосты. Проблема в том что с обоих доменов попадаю на один сайт а нужно на разные. Хоть и все настроено. Помогите пожалуйста в описании файла etc/httpd а также разграничение в дериктории volume1/web с помощью .htaccess

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

      в дериктории volume1/web .htaccess

      # first and default domainname (no need for virtual host)

      RewriteCond %{HTTP_HOST} ^www.site1.com$ [NC]

      RewriteRule ^(.*)$ /site1.com/index.php$1 [R,L]

      # second domainname (www.site2.com as virtual host)

      RewriteCond %{HTTP_HOST} ^www.site2.com$ [NC]

      RewriteRule ^(.*)$ /site2.com/index.php$1 [R,L]

      помогло но теперь сайты открываются в виде site1.com/site1.com/index.php и также site2.com/site2.com/index.php

      как исправить?

      Ответить
  233. ROMAN (1 комм.)

    Помогите настроить исключения в .htaccess

    Приобрёл и настроил SSL сертификат. Все прекрасно заработало только с таким вот кодом:

    RewriteEngine On

    RewriteCond %{SERVER_PORT} !^443$

    RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [QSA,L]

    1) Никак не могу настроить исключение для отдельной страницы, чтобы только она загружалась как http

    типа: http://mydomen.ru/portfolio/index.html

    2) И еще вопрос. Как создать исключение, чтобы всё содержимое определенной директории загружалось с http

    типа: http://mydomen.ru/work/

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

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

      Между строками

      RewriteCond %{SERVER_PORT} !^443$

      и

      RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [QSA,L]

      Добавьте

      RewriteCond %{REQUEST_URI} !^/work/ #для исключения папки

      или

      RewriteCond %{REQUEST_URI} !^/portfolio/index.html #для исключения конкретного url

      Ответить
  234. Валерий (3 комм.)

    Добрый вечер. Может вы сможете подсказать.

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

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

    Может вы знаете верный код для такой задачи?

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

      Простите, код не вставил. Сейчас остановился на таком варианте:

      RewriteCond %{REMOTE_ADDR} ^109.232.106.198

      RewriteCond %{REQUEST_URI} !^/ah.html

      RewriteRule .* /ah.html [R,L]

      Здесь идет бесконечное (ну, конечное правда) добавление в адресную строку "q=ah.html&q=ah.html&". И сообщение о цикличности.

      При варианте

      RewriteCond %{REMOTE_ADDR} ^109.232.106.198

      RewriteCond %{REQUEST_URI} !^{HTTP_HOST}/ah.html

      RewriteRule .* /ah.html [R,L]

      С {HTTP_HOST} во второй строке. Получаю адрес-сайта/ah.html и сообщение о цикличности.

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

        Еще раз извиняюсь — это последнее. Все получилось. Результат такой:

        RewriteCond %{REMOTE_ADDR} ^109.172.58.229

        RewriteCond %{REQUEST_URI} !^{HTTP_HOST}/ah.html$

        RewriteRule ^/$ /ah.html [R=301,L]

        Т.е. в третьей строке, после RewriteRule я добавил ^/$, а не .* или что-то еще. Все, теперь связь налажена :)

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

    Помогите разобраться.

    Редирект :

    RewriteCond %{HTTP_HOST} ^www.сайт.me$ [NC]

    RewriteRule ^(.*)$ http://сайт.me/$1 [R=301,L]

    — работает отлично на главной странице, а вот на внутренних www не убирает. Например. Вот ссылка.

    http://www.site.ru/download/__blond_mi_39672.html

    В чем проблемка может быть, и как ее исправить. в папке download есть еще один .htaccess с такими правилами

    RewriteEngine on

    RewriteBase /download/

    RewriteRule ^index.html$ index.php [NC,L]

    RewriteRule ^new.html$ index.php?act=new [NC,L]

    RewriteRule ^top.html$ top.php [NC,L]

    RewriteRule ^dir_ ([^/]*).html$ index.php?cat=$1 [NC,L]

    RewriteRule ^file_ ([^/]*).html$ file.php?view=$1 [NC,L]

    RewriteRule ^([^/]*) _ ([^/]*).html$ file.php?view=$2 [NC,L]

    RewriteRule ^str_ ([^/]*) _ ([^/]*).html$ index.php?cat=$1&page=$2 [NC,L]

    <Files ~ ".dat$">

    Deny from all

    </Files>

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

      Добавьте в htaccess, который в папке download сразу де после строки RewriteEngine on свой код для редиректа. Все будет работать!

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

    Здравствуйте, подскажите, пожалуйста, нужно ли в моём случае делать редирект. Раньше был мобильный шаблон, где при переходе с поисковых систем пользователь попадал на моб. версию (после url дополнительные символы ?m=1). То есть, если основная ссылка http://www.site.ru/test-ssilka.html, то при переходе с моб будет http://www.site.ru/test-ssilka.html?m=1. Таким образом на новом шаблоне такого нет и при переходе с мобилы выбивает ошибку 404. Нужно ли мне со всех url?m=1 делать редиректы на url. Есть ли один редирект, который сам всё выполнит? Или можно просто подождать пока поисковики приведут сами всё в порядок? Помогите, пожалуйста.

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

      Надо делать редирект. Вот такой:

      RewriteCond %{QUERY_STRING} ^m=1 [NC]

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

      Это поможет. Подробнее описано в посте про редирект с url с параметрами.

      Ответить
  237. Andy (1 комм.)

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

    а) site.ru/razdel/index.php должен перенаправлять на site.ru/razdel/

    б) более общий случай: site.ru/razdel/podrazdel1/.../podrazdelN/index.php/chto-to-isso должен редиректить на site.ru/razdel/podrazdel1/.../podrazdelN/chto-to-isso

    То есть, надо убрать index.php, который, в общем случае, может быть где-то в середине УРЛа.

    .htaccess — один, в корне сайта, класть их в каждую подпапку — не вариант.

    Ответить
  238. Марина (2 комм.)

    Внимательно прочла тему и всю историю комментирования. Очень полезная информация. Спасибо всем.

    Я сейчас тоже почти 3 месяца рву и мечу на своем сайте.) Через кучу собственных ошибок я довела до ума свой интернет-магазин. Мне сперва все оптимизировали сотрудники seobing.ru но почему то про редиректы ничего не сказали и не посоветовали.

    Только месяцем позже я разобралась, что такое редирект и код статуса.

    С удовольствием прочла все статьи в Вашем блоге! Превосходно!

    Ответить
  239. Женя (2 комм.)

    Подскажите правильный ридерикт

    с страницы http://mouportal.com.ua/sportivnie-tovari?page=1 нужно убрать page=1 чтобы получилось http://mouportal.com.ua/sportivnie-tovari

    перепробовал все варианты ничего не помогает

    Ответить
  240. Женя (2 комм.)

    Подскажите как правильно сделать ридерикт с товара на страницу во второй вложенности (убрать категории ) ?

    к примеру http://mouportal.com.ua/sportivnie-tovari/lacti-beco-r-33-35-9984.html должно перебрасывать на

    http://mouportal.com.ua/lacti-beco-r-33-35-9984.html

    Ответить
  241. Nik (3 комм.)

    Привет

    Не могу сделать redirekt старых страниц на новые

    Использовал разные конструкции но переадресация в Joomla или редирект вида ^/index.php?id=index1 , а вида 159.php работает.

    Joomla 3.4.8

    Подскажите, что делаю не так.

    Пример из .htaccess

    RewriteRule .* index.php #убрал [L]

    Redirect 301 /159.php /kovanye-izdeliya/kovanoe-ograzhdeniya.html # работает

    !!!!!!!!!!!!!!редирект такого вида не работает!!!!!!!!!!!!!!!!

    Redirect 301 ^/index.php?id=index1 http://site.ru/kovanye-izdeliya/kovanoe-ograzhdeniya.html # не работает

    RewriteCond %{QUERY_STRING} ^/index.php?id=index1 # не работает

    RewriteRule ^(.*)$ http://site.ru/kovanye-izdeliya/kovanoe-ograzhdeniya.html/%{HTTP_HOST}/$0? [R=301,L]

    RewriteCond %{QUERY_STRING} ^/index.php?id=index2

    RewriteRule ^(.*)$ http://site.ru/nerzhaveyushchaya-stal/izdeliya-iz-nerzhaveyushchej-stali.html/%{HTTP_HOST}/$0? [R=301,L]

    RewriteCond %{QUERY_STRING} ^/index.php?id=index3

    RewriteRule ^(.*)$ http://site.ru/kovanye-izdeliya/kovanye-vorota-kalitki.html/%{HTTP_HOST}/$0? [R=301,L]

    Спасибо

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

      Неправильно потому что делаете. Почитайте внимательно. Обратите внимание на редирект страниц с параметрами, я подробно описал принципы.

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

        Уважаемый АлаичЪ, если вас не затруднит, Вы можете написать конструкцию перехода для вида

        http://site.ru/index.php?id=index1 на

        http://site.ru/nerzhaveyushchaya-stal/izdeliya-iz-nerzhaveyushchej-stali.htm

        Уже не знаю, что делать, все прочитал но то 404 или на главную отправляет.

        Спасибо

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

          Вот так, думаю:

          RewriteCond %{QUERY_STRING} ^id=index1$

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

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

    Добрый день.

    Прошу помощи)

    www.sait.ru/catalog.php?id=0000000645&part=&sc=2

    требуется перейти на www.sait.ru/catalogue/0000000645/

    PS. Перечитал перепробовал... Мозг кипит

    Спасибо.

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

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

      RewriteCond %{QUERY_STRING} ^id=(.*) [NC]

      RewriteRule ^(.*) catalog.php $1catalogue/%1/? [R=301,L]

      Ответить
  243. wert (1 комм.)

    Здравствуйте , также прошу помощи)

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

    http://igromaniya.dp.ua/dityache_vzyttya/razvivaushie_igryshki

    ридерикт на

    http://igromaniya.dp.ua/razvivaushie_igryshki

    Ответить
  244. Егор (1 комм.)

    Доброго времени суток, АлаичЪ. Сегодня собираюсь удалить примерно 500 страниц с копипастом. Как быть с редиректом? Поставить 404 или сделать редирект на главную или категорию? Заранее спасибо!

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

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

      Ответить
  245. Nik (3 комм.)

    Доброго времени, АлаичЪ.

    Благодаря Твоим советом сделал 301 redirect — работает, но как сделать чтобы редирект с id=index1 и с id=index10 делали переадресацию на разные страницы, а сейчас id=index1 перехватывает id=index10 и отправляет на id=index1.

    Пример:

    RewriteCond %{QUERY_STRING} ^id=index1

    RewriteRule ^.*$ /kovanye-izdeliya/kovanoe-ograzhdeniya.html? [R=301,L]

    RewriteCond %{QUERY_STRING} ^id=index10

    RewriteRule ^.*$ /nerzhaveyushchaya-stal/izdeliya-iz-nerzhaveyushchej-stali.html? [R=301,L]

    Спасибо

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

      Поменяй местами правила, вот так:

      RewriteCond %{QUERY_STRING} ^id=index10

      RewriteRule ^.*$ /nerzhaveyushchaya-stal/izdeliya-iz-nerzhaveyushchej-stali.html? [R=301,L]

      RewriteCond %{QUERY_STRING} ^id=index1

      RewriteRule ^.*$ /kovanye-izdeliya/kovanoe-ograzhdeniya.html? [R=301,L]

      Последовательность имеет значение :)

      Ответить
  246. BlackCat (4 комм.)

    Приветы.

    Не увидел при беглом просмотре. Помогите сделать редирект, чтобы убрать категорию в ссылке.

    Сделать переадресацию всех страниц типа "сайт/папка/категория/товар" на страницы "сайт/папка/товар.

    Тоесть, "вырезать" нужно только конкретно категория, так как товар будет и 1 и 2 и т.д...

    Чуть выше https://alaev.info/blog/post/4393#comment-75877 задали такой же вопрос.

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

      Нормальные примеры URL давайте. Чего вы ссыте, от кого шифруетесь? Думаете, кому-то ваш сайт дался, чтобы залезть на него и обязательно все поломать?

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

        Ну вот — из такого

        http://new.kinesiotape.com.ua/kupit/kinesio-tejpy/rocktape-kinesiology-tape

        нужно сделать такое

        http://new.kinesiotape.com.ua/kupit/rocktape-kinesiology-tape

        То говорите не публиковать ссылки, то...

        Хотя с другой стороны может это в самой джумле настраивается? А я долбаюсь :)

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

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

          Уточню немного. Конец ссылки меняется — к нему не привяжемся.

          Тоесть, работать нужно с известным "kupit/kinesio-tejpy/..." и удалить известное "kinesio-tejpy/".

          Аналогично потом сделаю и для:

          "kupit/aksessuary/..." — удалить, соответственно "aksessuary/".

          "kupit/obuchayushchaya-literatura/..." — удалить, соответственно "obuchayushchaya-literatura/".

          "kupit/sportivnaya-meditsina/..." — удалить, соответственно "sportivnaya-meditsina/".

          Ну или может, можно сразу общее что-то можно сделать — вообще супер будет.

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

            Получилось для одного варианта вот так

            RewriteRule ^kupit/kinesio-tejpy/(.+)$ http://new.kinesiotape.com.ua/kupit/$1 [R=301,L]

            Только пришлось эту строку вверху над другими правилами поставить.

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

              В htaccess порядок строк имеет важнейшее значение. Раз сработало, значит можно работать дальше. Вот универсальное правило:

              RewriteRule ^kupit/([^/]*)/(.+)$ http://new.kinesiotape.com.ua/kupit/$2 [R=301,L]

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

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

    Подскажите, пожалуйста, как сделать редирект со всех страниц сайта со структурой http://мой-сайт.ру/index.php?option=com_easyblog&view=entry&id=номер id на http://мой-сайт.ру/stati/номер id

    Пробовала прописать RewriteRule ^/index\.php?option=com_easyblog&view=entry&id=(.*)$ /stati/$1 [R=301,L] — ничего не выходит...

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

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

      RewriteCond %{QUERY_STRING} ^option=com_easyblog&view=entry&id=(.*) [NC]

      RewriteRule (.*) http://мой-сайт.ру/stati/%1? [R=301,L]

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

        Все получилось, спасибо большое!

        Ответить
  248. Рустам (8 комм.)

    Привет Александр. Проблема следующего характера. Имеется сайт на DLE, все необходимые редиректы написанные тобой в постах по SEO оптимизация DLE сделал, но вот осталась одна мозолящая глаза ошибка 403 для 9-ти страниц. Как сделать для них правильные редирект на главную?

    Для ясности разъясню суть проблемы: в панели вебмастера отображается 9-ть страниц с 403 ошибкой, переходя по ним получаю надпись "Выбранная Вами тема не найдена в базе данных." Нужно ли делать на такие страницы редирект или нет. Огромная просьба дать правильный, дельный совет по устранению 403 ошибки. Рыскал в интернете, но по теме ничего не нашел. Заранее спасибо!

    Сделал в дополнении скин вебмастерской, чтобы было понятнее f-picture.net/lfp/s50.radikal.ru/i129/1604/4d/c3edd8535db6.jpg/htm

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

      Можно отправить эти 9 страниц на удаление и не париться — https://webmaster.yandex.ru/delurl.xml

      Ответить
      • Рустам (8 комм.)

        Удалить можно всегда), а возможно ли эти страницы правильно перенаправить?

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

          Так вопрос такой стоял: "просьба дать правильный, дельный совет по устранению 403 ошибки". Я ответил!

          Если надо сделать редирект, надо было так и спросить :)

          Смотри, что написано под заголовком "Простой редирект страницы на новый адрес". Пропиши простой редирект для этих 9 адресов и спи спокойно!

          Ответить
          • Рустам (8 комм.)

            Так я пошел их удалять как ты посоветовал, но после введения туда адреса и нажатия кнопки удалить, получаю ответ "Указанный URL не проиндексирован". Чёт не пойму в панели вебмастера ошибка числится, ссылку на скин я тебе дал, а по факту не проиндексирован. Мистика?

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

              Да нет, url и правда должны быть проиндексированы сперва, прежде чем быть удаленными. Я позабыл про это требование в Яндексе. Ну тогда редирект, как ты и хотел!

              Ответить
              • Рустам (8 комм.)

                Что, каждую 403 ошибку вписывать отдельно Redirect 301 /page-name1.html http://site.ru/page-name2.html? А единого решения 403 ошибки с 301 редиректом наверняка существуют?

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

                  Да, каждый делать.

                  Я не знаю решения, чтобы при 403 ошибке делать редирект. Даже погуглил, вдруг я чего-то не знаю — не нашел такого.

                  Ответить
                  • Рустам (8 комм.)

                    Прописал редирект edirect 301 /topic-75.html http://vseautomobile.ru/forum/. Не работает...что не правильно делаю?

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

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

                  • Рустам (8 комм.)

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

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

    Приветствую.

    Хорошая статья,спасибо.

    Хочу спросить, у меня сайт и форум на одном домене, мне нужно, чтоб при переходе по основному имени домена сайт.ru люди попадали на форум сайт/forum/index.php , но в то же время нужно, чтоб и главная страница сайта не выпала из выдачи, это возможно ?

    Спасибо.

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

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

      Redirect 302 / http://site.ru/forum/index.php

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

        Спасибо за ответ. Боюсь как бы под санкции поисковиков не попасть, не потерять в выдаче или вообще быть забаненным ) есть такой риск?

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

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

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

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

    Ответить
  251. hitman (7 комм.)

    Добрый день, АлаичЪ. Помогите пожалуйста.

    Возможно ли из такой вереницы сделать редирект на нормальное представление страниц пагинации

    index.php?do=filter&country_id=0&region_id=0&city_ids=0&city_id=0&city_other=&mark_id=0&model_id=0&model_ids=Array&model_other=&capacity_motor_min=&capacity_motor_max=&power_min=&power_max=&race=&cost_min=&cost_max=&year_min=&year_max=&currency=USD&search_count_day=0&isset_photo=0&sort=date&subsort=DESC&author_id=0&author=&class=0&basket=0&state=0&type_motor=0&count_door=0&fuel=0&transmission=0&air_conditioner=0&sound_system=0&ABS=0&hydraulic_booster=0&steadiness=0&full_drive=0&pillow_safety=0&other_transmission=0&invalid=0&window_raiser=0&navigation_system=0&thermo_control=0&mobile=0&central_lock=0&immobilizer=0&signalling=0&sensor_parking=0&xenon_lights=0&leather_salon=0&engine_room_hatch=0&warm_seat=0&webasto=0&cast_disk=0&componentry_tuning=0&page=2

    в /filter/page/2

    Заранее благодарен за любой ответ.

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

      Вроде, да. Попробуйте так:

      RewriteCond %{QUERY_STRING} ^do=filter(.*)page=(.*) [NC]
      RewriteRule (.*) $1/filter/page/%2? [R=301,L]
      Ответить
      • hitman (7 комм.)

        огромное спасибо, получилось. :)

        Ответить
  252. Рос (1 комм.)

    Привет.

    Подскажите, как поставить редирект если в URI страницы есть знак "="

    Вот URI страницы — /?_utl_t=gp

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

      Это параметр, а в посте описано, как с них делать редиректы.

      Ответить
  253. татьяна (2 комм.)

    Прошу помочь с записью в .htaccess. Читаю статью, но для меня очень трудно восприятие различных кодов (не хватает знаний).

    Дело в том, что я перенесла сайт в 400 страниц с самописного на вордпресс, стараясь сохранить адреса страниц, но тем не менее вместо .php появился слеш.

    Было: http://site.ru/straniza.php, Стало: http://site.ru/straniza/

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

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

      Возможно, но что конкретно-то надо сделать?

      Ответить
  254. татьяна (2 комм.)

    Можно ли сделать редирект старых страниц с php на новые без php (со слешем).

    Ответить
    • WakeUp Media (1 комм.)

      Татьяна, сделайте такую запись

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

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

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

        Если со слешем на конце, то вторая строяка должна быть следующей:

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

        То есть со слешем после $1

        Ответить
  255. moraks (1 комм.)

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

    Страница находится по ссылке http://b-care.xyz/?tmpl=comingsoon

    Сделал правило

    "RewriteCond %{HTTP_HOST} ^b-care.xyz/?tmpl=comingsoon [NC]

    RewriteRule ^(.*)$ http://b-care.xyz/comin$1 [R=301,L]",

    Страница теперь открывается по нужной ссылке: http://b-care.xyz/comin. Но в адресной строке постоянно перебрасывает на оригинальную http://b-care.xyz/?tmpl=comingsoon. Как можно сделать, чтоб в адресной строке оставался адрес ссылки http://b-care.xyz/comin

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

      Смотрите раздел в посте про редиректы для страниц с параметрами в url.

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

    При переезде сайта на HTTPS нормально работает...

    RewriteEngine On

    RewriteCond %{HTTP:X-Forwarded-proto} !^https$

    RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

    но есть проблема, сайт есть с www. и без, как решить?

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

    Здравствуйте, прочитала весь материал и комментарии, так и не нашла решение своей проблемы. Статья на сайте доступна по двум url: http://сайт/раздел_меню/статья и http://сайт/раздел_меню/категория/статья. Нужно, чтобы остался url с категорией. Можно ли с помощью редиректа это исправить?

    Ответить
  258. Денис (1 комм.)

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

    Ответить
  259. Aison (1 комм.)

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

    Он перенаправляет с http на https и с www на https

    RewriteCond %{HTTP_HOST} ^site\.ru [NC]

    RewriteCond %{HTTP:X-Forwarded-Proto} ^http$

    RewriteCond %{HTTPS} off

    RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

    RewriteCond %{HTTP_HOST} ^www\.(.*) [NC]

    RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

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

      Если он работает, значит правильный. Если не работает, значит не правильный. Другого ответа и не может быть.

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

    Добрый день!

    Сделал новый сайт, а старый перенес на поддомен.

    Подскажите, как можно написать правила так, чтобы при проходе по старой ссылке, пользователь перенаправлялся на эту страницу на поддомене? (страниц очень много). Можно какое-то правило описать?

    Спасибо!

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

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

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

        "Массово можно было бы редирект сделать с домена на поддомен, но там ведь новый сайт, так что это отпадает." В сущности так и получается, мне нужен редирект с домена на поддомен. Или я неправильно понял, можете пояснить?

        Ещё нашел вот такой способ.

        RewriteCond %{HTTP_HOST} ^old-site\.ru$ [NC]

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

        В моем случае:

        RewriteCond %{HTTP_HOST} ^pgpalata\.ru$ [NC]

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

        Пока не понимаю, будет ли это работать.

        Хотя по логике должно бы быть так:

        — Я зашел на сайт по старой ссылке.

        — Скрипт перехватывает ссылку.

        — Разбирает регулярным выражением ссылку.

        — Перед основной частью ссылки подставляет old.

        — Перенаправляет на нужный адрес.

        Что-то такое.

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

          Проверил.

          RewriteCond %{HTTP_HOST} ^pgpalata\.ru$ [NC]

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

          Перенаправляет глобально. Это неправильно.

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

            А как правильно?

            У вас в логике ошибка в этом моменте: "— Я зашел на сайт по старой ссылке." — вообще не важно по какой ссылке, он перенаправлять будет любой url домена и отправлять на поддомен.

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

              А можно ли отлавливать 404 ошибку и только в этом случае редиректить?

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

                Можно, но это уже не htaccess, а через php и это вопрос к программисту.

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

                  В общем сделал плагин на CMS с таким кодом:

                  <?php

                  define ('URL_SITE', 'http://old.site.ru/');

                  if ($modx->event->name != 'OnPageNotFound') {return false;}

                  $alias = $modx->context->getOption ('request_param_alias', 'q');

                  // в 'q' — параметре из массива, который возвращает результат на OnPageNotFound, находится всё то, что за слешем, после домена. Т.е. типа blablabla.html

                  if (!isset ($_REQUEST[$alias])) {return false;}

                  $request = $_REQUEST[$alias];

                  $modx->sendRedirect ( URL_SITE.$request );

                  //И здесь склеивается заранее известное значение переменной с тем, что пришло в запросе.

                  die;

                  <br />

                  Минус решения: работает только в том случае, когда на главном домене типа site.ru нет 404 документов. Иначе отправляет на поддомен. Это костыль, который пригодится на время умирания старого сайта и даст время забрать всё нужное с него. Возможно это повлечёт санкции от поисковиков.

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

                    Санкций со стороны ПС за такое решение не будет. Нормальная схема.

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

    Приветствую.

    Для перенаправления с основной страницы сайта site.ru на главную страницу форума на том же домене site.ru/forum/index.php попробовал вписать в файл .htaccess строчку Redirect 302 / http://site.ru/forum/index.php

    после этого страница site.ru становится недоступной и переадресации не происходит и браузер выдает надпись — Сайт www.site.ru выполнил переадресацию слишком много раз.

    Удалите файлы cookie...

    ERR_TOO_MANY_REDIRECTS

    Что не так ?

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

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

      RewriteRule ^/$ http://site.ru/forum/index.php [R=302,L]

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

        Попробовал, не работает, ничего не меняет, ничего не происходит)

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

          А так?

          RewriteRule ^$ http://site.ru/forum/index.php [R=302,L]

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

            RewriteRule ^$ http://site.ru/forum/index.php [R=302,L]

            Так отлично работает, спасибо !

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

              Только если ввести в адресной строке сайт.ру то переадресация срабатывает, а если ввести

              сайт.ru/index.htm то не срабатывает.

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

                Что просил то получил :)

                Пропиши ниже еще одну строку

                RewriteRule ^index.htm$ http://site.ru/forum/index.php [R=302,L]

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

                  Так почему то не работает(

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

    Уфф. Читать не перечитать.

    Подскажите, после переноса сайта на вордпресс, надо к паре десятков статей добавить в конце html на старом движке не было, а на новом автоматически добавляется по настройкам.

    Урл в остальном совпадает.

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

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

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

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

    Подскажите пожалуйста как сделать для всех страниц редирект типа site/index.php?_route_=cars_and_moto на site/cars_and_moto. Что бы с всех урлов убирало index.php?_route_=?

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

      RewriteCond %{QUERY_STRING} ^_route_=cars_and_moto$

      RewriteRule ^(.*)$ cars_and_moto? [R=301,NC,L]

      Так перенаправляет, от только циклическая переадресация. Как сделать без циклической?

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

    Спасибо автору блога за статью. Но свою проблему так и не смог решить:

    Перенес сайт с самописной cms на wordpress. В вордпрессе настроил ЧПУ таким образом, чтобы динамические страницы имели вид *.html

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

    Пример:

    Делаю переадресацию со страницы

    со страницы http://ИмяСайта/articles.php?id=102

    на страницу http://ИмяСайта/stati/stati-o-dyhanii/novaya-ideologiya-zdorovya.html

    Пишу такое правило (перепробывал много разных вариантов, этот вариант был последним)

    RewriteCond %{QUERY_STRING} ^id=102$

    RewriteRule ^articles$ /stati/stati-o-dyhanii/novaya-ideologiya-zdorovya.html? [R=301,NC,L]

    В итоге хочу попасть на страницу /stati/stati-o-dyhanii/novaya-ideologiya-zdorovya.html , а попадаю по адресу /stati/stati-o-dyhanii/novaya-ideologiya-zdorovya/

    Подскажите кто знает, что я делаю не так?

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

      Учитывая правила

      RewriteCond %{QUERY_STRING} ^id=102$

      RewriteRule ^articles$ /stati/stati-o-dyhanii/novaya-ideologiya-zdorovya.html? [R=301,NC,L]

      Это не работает. Потому что, во-первых http://ИмяСайта/articles.php?id=102 не пройдет соответствие на ^articles$. Надо писать ^articles.php. Во-вторых, эти правила никак не могу делать то, что в итоге происходит, значит срабатывают внутренние правила WP по перезаписи адресов.

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

        Спасибо, получилось сделать редирект.

        Возник еще один вопрос — существуют ли ограничения на количество записей (строк редиректа) в файле htacsess? И может ли большое количество редиректов в файле htacsess снизить производительность сайта или повлиять на нагрузку хостинга в худшую сторону?

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

          Про ограничение строк не слышал, но если там в перспективе много условий, то в таких случаях используют php-редиректы.

          Ответить
  265. Саша (1 комм.)

    Добрый день. Скажите как сделать редирект со страницы категории site.ru/test1/ на страницу site.ru/test1 при этом нужно чтобы все страницы внутри этой категории (например site.ru/test1/1/ и site.ru/test1/2/) остались работоспособными и редирект страницы категории не влиял на них.

    Ответить
  266. Alex (1 комм.)

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

    1) с /discr.php?id=10002#form1 на /discr.php?id=10002

    2) с /discr.php?id=10022#form1 на /discr.php?id=10022

    пробовал RewriteRule (.+)#form1 $1? [R=301,L] не сработало

    1) возможно ли вообще сделать такой редирект?

    2) как правильно его сделать?

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

      #form1 — это вообще не часть url, это якорь. Можно убирать его из строки. Смотрите выше раздел про редирект с параметрами, потому что тут чистой воды параметр ?id=

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

    Добрый день!

    Подскажите, пожалуйста, где ошибка в таком редиректе:

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

    RewriteRule ^index\.php$ http://www.advokat-romanov.com/ [R=301,L]

    Со страницы http://www.advokat-romanov.com/index.php на страницу http://www.advokat-romanov.com он перенаправляет, но на внутренние страницы данный редирект не работает, открывает их — http://www.advokat-romanov.com/index.php/services (например).

    Цель: полное перенаправление всех страниц с index.php на такие же страницы, без index.php

    Если важно, то внутренние страницы имеют вложенность /main/ (имеют адреса http://www.advokat-romanov.com/main/services (например)

    Заранее благодарен за ответ!

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

      Здесь нет ошибки, это правило и предназначено для редиректа только от корня.

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

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

        Добрый день!

        Благодарю за ответ!

        Адреса на сайте такие:

        http://www.advokat-romanov.com

        http://www.advokat-romanov.com/main/biography

        http://www.advokat-romanov.com/main/services

        http://www.advokat-romanov.com/main/%20news (страницы отдельных новостей имеют адреса http://www.advokat-romanov.com/main/%20news?id=56 например) и так далее.

        Но в логотипе была ссылка на http://www.advokat-romanov.com/index.php, которая плодита дубли типа

        http://www.advokat-romanov.com/index.php/services и так далее.

        Но самое неприятное, появились такие страницы

        http://www.advokat-romanov.com/index.php/services?request_url=/main/services&request_lang=

        Не ждал уже помощи, потому сегодня убрал ссылку из логотипа на index.php (плюс ранее в htaccess настроил редирект с index.php).

        Теперь все эти "неправильные" страницы открываются в Ошибка 404, редирект с главной страницы index.php срабатывает.

        Думаю, может быть зря убрал ссылку из логотипа? Теперь появится куча ошибок 404.

        Лучше, наверное, вернуть ссылку в логотип и поставить правильный редирект.

        Буду очень признателен за любую помощь или совет!

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

          Что меня смущает на сайте, так это присутствие пробела в url новости, вот это http://www.advokat-romanov.com/main/%20news — в данном случае %20 это и есть пробел типа. Надо вам где-то в настройках движка поправить, чтобы пробела тут не было.

          С чего вы взяли, что есть какие-то проблемы с index.php не знаю, но ни на сайте, ни в индексе Яндекса и Гугла я не нашел таких ошибочных страниц. Может зря панику поднимаете?

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

            Добрый вечер!

            Конфигурация движка такова, что %20 уже не исправить: там что-то как-то сложно, а я сам в этом ничего не смыслю. Когда над валидностью сайта работал, программисты говорили, что это лучше уже не трогать.

            http://www.advokat-romanov.com/index.php не открывается, так как в htaccess установлен редирект с index.php, саму формулу редиректа взял на этой странице.

            Но страницы типа http://www.advokat-romanov.com/index.php/services?request_url=/main/services&request_lang= в браузерах открывались, они есть в загруженных страницах панелей вебмастера.

            Большая их часть была мной на днях удалена из Гугла (указал в параметрах URL); такие же страницы через инструмент "Удалить URL" убрал из поиска Яндекса, предварительно закрыв их в robots.txt.

            Сейчас robots.txt очистил от всех запретов, прописал в исходном коде noindex и nofollow для страниц, в url которых встречаются всякие параметры. Проверил, не знаю правильно сделал или нет, но вроде бы все работает: в исходном коде "неправильных" страниц и "версий для печати" отображается запрет на индексирование.

            В любом случае, благодарю за ответ! И формула редиректа с index.php, которую раздобыл на этой странице, успешно работает.

            С уважением,

            Владимир

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

              Всяких странный адресов напридумывать можно много, но делать этого не нужно. Главное следить, чтобы они в выдачу/индекс не попали. А левых адресов в индексе для вашего сайта нет, я проверил, можете спать спокойно.

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

                Александр, добрый вечер!

                Рад был бы, если бы таких адресов в поиске не было, но они были. И до сего дня в Гугле были "версии для печати", причем в большем количестве, чем обычных страниц. Удаляю их в поисковиках понемногу: в Яндексе их в поиске уже нет совсем, осталось немного страниц в разделе "загружено"; в Гугле сегодня вручную удалил около 50-ти страниц, закрыл их метатегом. Буду наблюдать.

                С уважением,

                Владимир

                Ответить
  268. Борис (4 комм.)

    Добрый день! В режиме многосайтовости работают два сайта, оба на Битриксе. Никак не включается короткая ссылка через 301. вот посоветуйте как уйти от этого http://new.fibrafabra.ru/catalog/pryazha/filter/material-is-akril/apply/?view=blocks&page_count=48&sort=name&by=asc хотя бы к этому — http://new.fibrafabra.ru/catalog/pryazha/filter/material-is-akril/ или как-то убрать вообще слово filter. Поможет Ваша разработка?

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

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

      Ответить
      • Борис (4 комм.)

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

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

          Надо быть специалистом по Битриксу, чтобы ответить, а я не битриксоид. Так что не подскажу, к сожалению.

          Ответить
          • Борис (4 комм.)

            я уже нашёл решение проблемы. спасибо за ответ!

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

              Поделитесь?

              Ответить
              • Борис (4 комм.)

                без проблем...короткие ссылки были нужны для СЕО. решилось установкой в Битриксе вот этого модуля http://marketplace.1c-bitrix.ru/solutions/sotbit.seometa/ и всё...

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

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

    Хочу перенаправить старую версию сайта на новую со всеми категориями и страницами.

    Полостью перенаправить всё со старой версии на новую

    RewriteCond %{REQUEST_URI} (.*)

    RewriteRule ^(.*)$ http://site.ru/catalogs/katalog-polcar.html [L,R=301]

    Я думаю вариант не совсем удачный (подходящий)

    Пере направление определенной категории в категорию соответствующую на новом сайте

    Redirect 301 /category_2.html http://site.ru/catalogs/katalog-polcar-alfa-romeo.html

    Благо категорий всего 1700 и с помощью excel и при помощи функции =СЦЕПИТЬ можно слепить редиректы категорий.

    Со страницами намного сложней их около 60000. Как вариант перенаправить все страницы (со всех категорий)

    RewriteCond %{REQUEST_URI} (product.*)

    RewriteRule ^(.*)$ http://site.ru/catalogs/katalog-polcar.html [L,R=301]

    Все работает, вопрос в другом.

    Правильно ли я поступаю в случае с пере направлением всех страниц на определенную (с точки зрения поисковиков)?

    Длинная портянка конечно получится.

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

      Тут либо оставить как есть, негативный момент только в том, что потребуется время на индексацию новой структуры, при этом старая структура не канет в лету пластом мертвых страниц, а склеится с категориями. Это хороший вариант. Либо же идеально — склеить один к одной каждую старую страницу, на новую, но это уже не через htaccess надо делать, тут привлекать программиста, чтобы матрицу соответствия построить и редиректить. Короче, если не заморачиваться, то лучше оставить.

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

    Добрый день, статья замечательная!

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

    с http://site.ru/index.php?blablabla на http://site.ru

    с http://site.ru/ на http://site.ru

    с http://site.ru/?blablabla на http://site.ru?

    Ответить
  271. Роман (5 комм.)

    Добрый день.

    Пробую убрать /item/ во всех страницах продукции сайта,но получается либо бесконечная ссылка от корня хостинга , либо 404

    Подскажите,как можно из такого URL :

    http://megobiz.by/produktsiya/item/farsh-myasnoj-kotletnyj.html

    сделать такой :

    http://megobiz.by/produktsiya/farsh-myasnoj-kotletnyj.html .

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

    Что бы это правило было пременимо ко всем страницам

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

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

      Ответить
      • Роман (5 комм.)

        Выставлял, не помогло

        Написана такая конструкция

        RewriteBase /

        RewriteRule ^item/(.*)/result.html$ $1 [R=301,L]

        RewriteRule ^item/(.*)\.html$ $1.html [R=301,L]

        URL имеет правильный вид ,но страница 404

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

          И вот еще что хочу добавить. Редирект делает перенаправление, он не создает страницы по новым адресам. Если страниц без item/ в адресе никогда не существовало, они и не появятся от редиректа. Надеюсь, вы это понимаете.

          Ответить
  272. Роман (5 комм.)

    Выставлял, не помогло

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

    Здравствуйте, Александр!С Вашего позволения, такой вопрос.Я хочу изменить заголовки нескольких постов в блоге (в сторону НЧ запросов). Только заголовки, ЧПУ и описание к ПС.Таких постов будет около 5-6%. Нужно ли в этом случае делать перенаправление со старых страниц на новые?Раньше я поступал так : изменял заголовки, публиковал посты с новыми заголовками, а внешние ссылки на старые посты удалял и все.

    Заранее благодарю за помощь.

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

      Конечно надо делать редиректы. Но у меня вопрос — а зачем менять url страниц? Измените заголовок и все.

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

        Я не очень-то разбираюсь в этих вопросах, может мой ответ покажется глупым, но все же...Если я меняю название поста, разве url не меняется автоматически?Суть вот в чем : у меня в блоге есть несколько постов с малым трафиком.Я хочу просто изменить заголовки под НЧ запросы (сейчас ВЧ запросы) и все.То есть в этом случае этим и ограничиться?

        Благодарю.С уважением — Александр.

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

          Все зависит от движка, который вы используете и от типа ЧПУ и еще от массы вещей, которые настраиваются индивидуально. Но по-хорошему, url меняться не должен! Если есть такая возможность, постарайтесь его не менять.

          Ответить
  274. Илья (18 комм.)

    Добрый день! Подскажите пожалуйста. Если со своей страницы сослаться 5 раз на разные страницы одного домена, то это поисковыми системами будет считаться что это 5 внешних ссылок? И в 5 раз больше веса страницы уйдет?

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

      Да, это 5 внешних ссылок. Вес уходит по всем и любым ссылкам.

      Ответить
      • Илья (18 комм.)

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

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

    Добрый день.

    Обнаружил что не все страницы перенаправляются. Есть страницы вида http://www.site.ru/index.php?productID=7447, http://www.site.ru/index.php?productID=7446, http://www.site.ru/index.php?productID=732 и т.д в общем меняется ID. Вставляю конструкцию такого вида:

    RewriteCond %{REQUEST_URI} (index.php?productID=.*)

    RewriteRule ^(.*)$ http://site.ru/catalogs/katalog-polcar.html [L,R=301]

    Но не происходит пере адресация. Подскажите где ошибка? Или как написать правильную конструкцию

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

    Вот что имеем:

    # Block any script trying to base64_encode data within the URL.

    RewriteCond %{QUERY_STRING} base64_encode[^(]*\([^)]*\) [OR]

    # Block any script that includes a <script> tag in URL.

    RewriteCond %{QUERY_STRING} (<|%3C)([^s]*s)+cript.*(>|%3E) [NC,OR]

    # Block any script trying to set a PHP GLOBALS variable via URL.

    RewriteCond %{QUERY_STRING} GLOBALS (=|\[|\%[0-9A-Z]{0,2}) [OR]

    # Block any script trying to modify a _REQUEST variable via URL.

    RewriteCond %{QUERY_STRING} _REQUEST (=|\[|\%[0-9A-Z]{0,2})

    # Return 403 Forbidden header and show the content of the root home page

    RewriteRule .* index.php [F]

    #

    ## End — Rewrite rules to block out some common exploits.

    многие страницы при переходе выходят на 404 ошибку или получаются страницы с совершенно другим урл

    поправьте, пожалуйста

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

    Добрый вечер.

    1) Есть адрес: http://site.ru/menu/cat

    2) Есть адрес: http://site.ru/menu/cat/material

    По 2-м этим адресам находится один и тот же материал. Так изначально вышло.

    И таких вот ссылок не один десяток (материал одновременно и в категории и непосредственно в материале)

    Подскажите пожалуйста, как реализовать перенаправление посетителя на страницы вида: http://site.ru/menu/cat/material, при его запросе в страницам вида: http://site.ru/menu/cat, дабы не прописывать в htaccess кучу правил? Может как регулярками в htaccess? Или с помощью php? Вообщем без разницы как, главное чтобы работало. Можно ткнуть меня носом на пример :) Спасибо.

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

    Помогите пожалуйста с дублями! Не могу понять как мне [ R=301, L] сделать. По разному пробовал, но никак. 

    domen-moy.ru/  

    domen-moy.ru/statya/  

    После слеша возможна подстановка поиска      

     ?s=чайник&submit=Поиск   

    Хочу чтобы ссылки могли состоять только из букв нижнего регистра и знака (-)  , и все символы и спецсимволы после слеша редиректили на активную ссылку, Но есть строка поиска после слеша (ее надо исключить чтобы эту строку не обрезало вместе с остальными символами), а внутри строки поиска появляется текст при поиске по сайту, там также условие чтоб только буквы нижнего регистра были, но уже без знака (-).  Сайт на wordpress.

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

      Это доработка самого движка нужна, а не редиректы. Тут все сложнее.

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

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

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

      С проблемой разобрался включением переадрессации в настройках движка

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

    Здравствуйте. Подскажите, пожалуйста. По первости ссылки были такого формата http://site.ru/?view=content&post_id=(номер поста)

    Затем с помощью .htaccess заменил на http://site.ru/post/(номер поста), прописав такую строчку

    RewriteRule ^post/(\d+)/?$ ?view=content&post_id=$1

    в файле .htaccess

    Теперь обе ссылки рабочие. Как сделать, чтобы при переходе по старой происходил редирект на новую ссылку?

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

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

      После строки:

      RewriteRule ^post/(\d+)/?$ ?view=content&post_id=$1

      Добавьте вот эти строки:

      RewriteCond %{QUERY_STRING} ^view=content&post_id= [NC]

      RewriteRule (.*) post/%1? [R=301,L]

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

        Строчки добавил, теперь после адреса сайта прописывается полный (абсолютный) путь к папке сайта и срабатывает 404 ошибка и номер поста не проставляется

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

          Добавьте еще RewriteBase / перед строками.

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

            Уже лучше, но после post/ не ставится номер поста (id статьи)

            Например, при обращении к странице site.ru/?view=content&post_id=30 происходит редирект на site.ru/post/

            Номер статьи не подставляется.

            Может какой-то символ нужно поставить в конце строки

            RewriteCond %{QUERY_STRING} ^view=content&post_id=

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

              Хех, да, мой косяк. Надо строку

              RewriteCond %{QUERY_STRING} ^view=content&post_id= [NC]

              Изменить на

              RewriteCond %{QUERY_STRING} ^view=content&post_id=(.*) [NC]

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

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

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

    Ребята, добрый день!

    Столкнулся с проблемой редиректа со старого сайта. Вот с такого адреса /floors/?base=2&news=27 надо перевести на вот такой /department-manicure.html. Пробовал по разному, но не выходит. ОЧЕНЬ ПРОШУ ПОМОЩИ!!!

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

      Вот такие строки:

      RewriteCond %{QUERY_STRING} ^base=2&news=27 [NC]

      RewriteRule (.*) http://site.ru/department-manicure.html? [R=301,L]

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

        Не работает, переходит на вот такой адрес: http://kopeechka.ru/1st-floor-penny/, а надо на вот такой: http://kopeechka.ru/the-mens-department, -everything-for-the-bath.html.

        Я так уже пробовал, второй день бьюсь, много вариантов перепробовал!!! Сейчас прописал вот так (по вашему примеру):

        RewriteCond %{QUERY_STRING} ^base=2&news=20 [NC]

        RewriteRule (.*) http://kopeechka.ru/the-mens-department, -everything-for-the-bath.html? [R=301,L]

        если ставлю запрос вот так: http://kopeechka.ru/?base=2&news=20, то переходит куда надо: http://kopeechka.ru/the-mens-department, -everything-for-the-bath.html, а с таким запросом: http://kopeechka33.ru/floors/?base=2&news=20 не работает!!!

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

          Ну значит какие-то другие редиректы там еще стоят в промежутке, иначе просто не может случаться переход на /1st-floor-penny/, если у меня четко в правиле написано /department-manicure.html

          Разбирайтесь.

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

            Спасибо! Разобрался

            Ответить
  282. Элик (20 комм.)

    Доброе время суток.

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

    на главной вида site.ru/?324533 (цифр 6)

    страниц таких к сожалению много и в ручную это прописывать не реально.

    Пытаюсь сделать редирект всего после знака ? но увы не получается

    1) Ноль реакции

    RewriteCond %{QUERY_STRING} ^(.+)$ [NC]

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

    2) Все также

    RewriteCond %{QUERY_STRING} ^(.*)$

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

    3)При таком варианте редирект как бы происходит но сайт не работает

    RewriteCond %{REQUEST_URI} ^/(.*)$ [NC]

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

    Помогите пожалуйста решмть этот вопрорс

    Ответить
  283. Элик (20 комм.)

    RewriteCond %{QUERY_STRING} ^(.*) [NC]

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

    Так редиректит но сайт не пашет((((

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

    Здравствуйте. Моя задача может показаться для вас очень простой, но для меня это проблема. Подскажите, пожалуйста, как сделать редирект с главной страницы сайта1 на главную сайта2, при этом все страницы сайта1 не должны редиретить на сайт 2.

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

      Какой-то из этих вариантов должен сработать:

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

      RewriteRule ^$ http://site2.ru/ [R=301,L]

      или

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

      RewriteRule ^/$ http://site2.ru/ [R=301,L]

      Ответить
  285. Иван (10 комм.)

    Добрый день АлаичЪ. Помогите пожалуйста с редиректом. Удалил когда-то штук 20 статей с сайта. Когда захожу по старому адресу, пишет: "К сожалению, данная страница для Вас недоступна, возможно был изменён её адрес или она была удалена." Как сделать с таких страниц редирект на 404 страницу или на главную? Спасибо.

    Ответить
    • Иван (10 комм.)

      Забыл написать DLE 11.1

      Ответить
      • Иван (10 комм.)

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

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

    Добрый день. Настроил редирект на добавление слеша в конце урл для каталогов все нормально работает. Но для домена site.ru перенаправление на site.ru/ не происходит при этом сервер в обоих случаях выдает код 200. Подскажите как настроить редирект с site.ru на site.ru/ Заранее спасибо за ответ.

    Ответить
  287. Павел (1 комм.)

    Добрый День !

    Подскажите есть страница с регистрацией мойсайт.ru/index.php?оption=com_virtuemart&view=user&layout=edit&Itemid=214 ( без ЧПУ ) если специально вводишь несуществующий логин и пароль кидает на страницу мойсайт.ru/index.php?option=com_users&view=login как сделать так при помощи редиректа что бы возвращал на первоначальную страницу.

    Спасибо

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

      Редиректы тут не помогут, тут с самом скрипте сайта надо смотреть и править.

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

    Здравствуйте, подскажите как сделать редирект правильно. Есть многостраничный сайт на чистом html. На этом сайте прилично битых страниц/ссылок, то есть несуществующих. Хочу сделать так, чтоб при клике на такую ссылку/страницу перенаправляло на главную. Также есть много фото битых, как правильно с ними поступить также? Также редирект на главную сделать? Подскажите плиз.

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

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

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

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

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

    Почему-то не работают остальные страницы главной. Идет 404 начиная со второй и дальше.

    При включенном редиректе на https.

    Кусок который виноват:

    RewriteCond %{SERVER_PORT} !^443$

    RewriteRule .* https://%{SERVER_NAME}%{REQUEST_URI} [R=301,L]

    RewriteCond %{HTTP_HOST} !^aminegold.ru$ [NC]

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

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

    RewriteRule ^index\.(php|html|htm)$ https://aminegold.ru/ [R=301,L]

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

    Здравствуйте, у меня сайт на wordpress 4.7.3 , помогите пожалуйста, — как решить проблему — если дописать к адресу страницы (к примеру https://undelete-file.ru/softkatalog) и добавить в конце "/45844" (любые цифры) то открывается эта же страничка! Тоже самое наблюдается и с самими статьями в формате "сайт/статья.html" (например: https://undelete-file.ru/recuva-download.html/997979) пожалуйста помогите — как правильно сделать редирект? Заранее огромное спасибо!

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

      Этот блог ещё живой или автор уже не заходит на него???

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

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

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

          Так у меня разве не получится исправить редиректом? Или это к редиректу не относится?Ткните хоть носом где посмотреть и решить мою проблему. Заранее спасибо!

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

            Или это вовсе — не проблема? Я тогда совсем запутался...

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

              Это проблема, если такие страницы есть в индексе, а если их нет — не проблема.

              Как это решить, вопрос непростой, и решение его зависит от многих условий. Подобные проблемы, что вы описали, должны решаться самим движком (ну, как минимум, отдаваться 404 ошибка), либо конкретными доработками конкретного движка, а не универсальным редиректом, который под решение таких ошибок и не предназначен и не подходит. По идее, если отображается какая-то определенная страница по левому адресу, на странице должен быть canonical, в котором указана оригинальная страница, и тогда левая страница никогда не проиндексируется. Тот же All in One SEO прописывает каноникалы, если включить настройку, и тогда проблема решена. Пробуйте.

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

                Спасибо за подробности, всё расписали 'по полочкам', благодарю! :)

                Ответить
    • Денис (8 комм.)

      У меня такая же беда оказывается... Но как я понял из ответов ниже, редиректа и выдачи 404 не сделать?! Вордпресс если что...

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

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

    А если урл — http://zap-online.ru/site/index / , а надо http://zap-online.ru, то правило

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

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

    подходит?

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

      Не подходит. Обычное подойдет:

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

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

    Доброго времени суток уважаемые ГУРУ!

    У меня вот такая трабла:

    Вот код .htaccess

    # Этой частью кода я пытаюсь исключить index.php из URL

    <IfModule mod_rewrite.c>

    RewriteEngine On

    RewriteBase /

    RewriteCond %{THE_REQUEST} ^GET\ .*/index\.php\ HTTP

    RewriteRule ^index.php$ / [QSA,R]

    RewriteCond %{REQUEST_URI} ^(.*)/index.php (.*)$

    RewriteRule (.*)/index.php (.*) http://my.lessons.ru/$2 [R=permanent,L]

    </IfModule>

    # Эта часть кода заставляет переходить из всех неизвестных

    # ссылок на index.php в корне сайта Эта часть кода работает безупречно

    <IfModule mod_rewrite.c>

    RewriteEngine On

    RewriteBase /

    RewriteRule ^index\.php$ — [L]

    RewriteCond %{REQUEST_FILENAME} !-f

    RewriteCond %{REQUEST_FILENAME} !-d

    RewriteRule ^(.*)$ index.php [L,QSA]

    </IfModule>

    Имеется URL

    http://my.gtstream.ru/index.php — Вариант 1

    http://my.gtstream.ru/index.php/id44444999 — Вариант 2

    http://my.gtstream.ru/index.php/id44444999/RRR/TTT?DD=22&gg=test — Вариант 3 (естественно приблуды после домена тестовые)

    Так вот при попытке исключить index.php из кода

    в 1 варианте все работает

    во 2 варианте работает через раз. При реферальном переходе Index.php остается в opere и в ie

    а третий вариант вообще косячит. Какая то непонятка.

    бывает http://my.gtstream.ru // index.php/id44444999/RRR/TTT?DD=22&gg=test

    бывает http://my.gtstream.ru//index.php/id44444999/RRR/TTT?DD=22&gg=test

    и еще бывает бывает http://my.gtstream.ru (без слеша) index.php/id44444999/RRR/TTT?DD=22&gg=test

    (пробелов после .ru нет. Я пробелы поставил для акцента внимания. Траблы возникают в основном при реферальном переходе (сам на себя).

    может кто набросает на быструю руку пример что бы из

    http://my.gtstream.ru/index.php/id44444999/RRR/TTT?DD=22&gg=test

    получился такой код

    http://my.gtstream.ru/id44444999/RRR/TTT/22/test

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

    Ответить
  294. Богдан (1 комм.)

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

    Сейчас после установки ssl, страницы которые в индексе с http редиректят с подставлением index.php?_route_=, в результате получаются страницы такого типа https://site.ru/index.php?_route_=ua/video/ с кодом 404.

    Как построить правильную конструкцию чтобы получить https://site.ru/ua/video/?

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

    Здравствуйте, подскажите пожалуйста в чем причина вывода таких ссылок в Яндекс.ВебМастер:

    /и/category/molotok/product/8972/category/slesarno-montazhnyj-instrument/

    /и/category/nozhovka/product/nozhovka-po-derevu-rossija-art-23163/category/slesarno-montazhnyj-instrument/product/kljuch-kombinirovannyj-8x-8-gost-1465-80/category/kljuchi/

    /и/category/topor/category/topor/?direction=DESC&sort=customers_rating

    /?link=/drayver-android-dlya-blyutuz.php

    /brand/БАРС/?page=30

    /category/akkumuljatornye-dreli-shurupovyorty/?page=37&sort=stock&order=desc

    /category/akkumuljatornye-dreli-shurupovyorty/?price_max=5000&price_min=4000

    /category/akkumuljatornyj-instrument/?page=35&sort=rating&order=desc

    /category/akkumuljatornyj-instrument/offset240/?sort=Price&direction=ASC

    /category/avtoaksessuari/?page=10&sort=name&order=asc

    И как исправить эту проблему? Спасибо

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

      В чем причина — это вы у Яндекса лучше спросите.

      Что делать, несколько вариантов, если отдает 404 ответ, то можно ничего не делать, еще можно закрыть от индексации в robots.txt. Можно делать и 301 редирект, но мне кажется, что таких ссылок там много, а общих признаков у них не много, чтобы редиректить по маске.

      Ответить
  296. Игорь (7 комм.)

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

    Стоит задача заменить в URL знаки подчеркивания на тире, использую вот такую конструкцию

    RewriteRule ^(.+)(\s|_|---)(.+)$ /$1-$3 [R=301,L]

    Она отлично обрабатывает, но происходит множественный редирект.

    Как все найденные знаки подчеркивания обработать за раз и вернуть ответ 301?

    Спасибо

    Ответить
  297. Олег (1 комм.)

    Здравствуйте, помогите прописать редирект 301 для сайта, что бы он был без www, и чтобы не было дубля главной страницы index.html, В общем нужен единый целый редирект для решения двух этих проблем. Спасибо.

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

      В самом посте это есть, будьте внимательнее.

      Ответить
  298. александр (1 комм.)

    Добрый день, огромное вам спасибо за интересные статьи, просьба подсказать начинаюшему специалисту) на сайте каталог товаров 120000 товаров, часть товаров удаляется как устаревшие и добавляются новинки. настроена 404 страница, вопрос: можно ли просто старье удалять и не переживать (ссылок на них нет) или нужно через редирект настраивать на материнскую подкатегория?

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

      Можно. Но лучше делать редирект.

      Ответить
  299. Nikolay (1 комм.)

    Добрый день Александр!

    Сделал 301 редирект нескольких страниц.

    1. Нужно ли исключать их из sitemap.xml ? Если да то когда, сразу или после переиндексации (появления в поиске на новом сайте) ?

    2. Нужно ли их удалять (сами страницы) со старого сайта после переиндексации?

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

      1. Нужно. Сразу.

      2. На ваше усмотрение, это не имеет никакого значения для поисковиков.

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

    Добрый день!

    Подскажите пожалуйста как привести следующее к универсальному виду

    RewriteCond %{QUERY_STRING} ^page=(\d+)$

    RewriteRule ^catalog/$ /catalog/?page=%1/ [L,R=301]

    Ответить
  301. Алекс (1 комм.)

    для joomla надо сделать редирект — есть вот такой вот вид страницы — например — www.blabla.ru/goods/...

    Нужно подменять такие goods/...... на catalog.php — как должна выглядеть команда?

    Ответить
  302. Артём (1 комм.)

    Здравствуйте, подскажите пожалуйста:

    В связи с тем, что регистатор разделигировал домен site1.ru, возникла необходимость сделать редирект на site2.com

    Файл .htaccess имеет вид:

    # BEGIN WordPress

    <IfModule mod_rewrite.c>

    RewriteEngine On

    RewriteBase /

    RewriteCond %{REQUEST_FILENAME} !-f

    RewriteCond %{REQUEST_FILENAME} !-d

    RewriteRule . /index.php [L]

    </IfModule>

    # END WordPress

    <Files wp-login.php>

    Deny from all

    </Files>

    Скажите пожалуйста правильно ли прописан редирект в следующем коде:

    1)# BEGIN WordPress

    2)<IfModule mod_rewrite.c>

    3) RewriteEngine On

    4) RewriteBase /

    5) RewriteCond %{REQUEST_FILENAME} !-f

    6) RewriteCond %{REQUEST_FILENAME} !-d

    7) RewriteRule . /index.php [L]

    8) RewriteCond %{HTTP_HOST} ^site1\.ru$ [NC]

    9) RewriteRule ^(.*)$ http://site2.com/$1 [R=301,L]

    10)</IfModule>

    11)

    12)# END WordPress

    13)

    14)<Files wp-login.php>

    15) Deny from all

    16)</Files>

    или строчки 4,5,6,7 нужно удалить?

    Ответить
  303. Зульфия (5 комм.)

    Здравствуйте, уважаемый автор блога! Уже во многих местах задавала свой вопрос, но мне почему-то никак не могут ответить... То ли лень, то ли вопрос слишком сложный... Вся надежда на Вас, сама, боюсь, не осилю...

    Итак, нужно сделать редирект с

    http://сайт.ru/категория/материал.html?showall=&start=3

    на

    http://сайт.ru/категория/материал.html?start=3

    Проще говоря, нужно избавиться от showall=& в адресах страниц.

    С Уважением!

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

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

      RewriteCond %{QUERY_STRING} ^showall=&start=3 [NC]

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

      Ответить
      • Зульфия (5 комм.)

        Спасибо огромное, АлаичЪ, что обратили внимание на мой вопрос. Вот только подобных страниц очень много и не все они start=3. Есть и 1, и 2, и 4 и т.д. Хотелось бы какой-нибудь универсальный редирект.

        Можно ли в моем случае сделать так:

        RewriteCond %{QUERY_STRING} ^showall=&start= [NC]

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

        Или после знака "=" вместо цифр нужно что-то вписать?

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

          Тогда вот так, если меняется только цифра в параметре start=

          RewriteCond %{QUERY_STRING} ^showall=&start=(.*) [NC]

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

          Пробуйте.

          Ответить
          • Зульфия (5 комм.)

            АлаичЪ, Вы волшебник! Почти... У меня исчезло showall=&, но между адресом сайта и категорией прописался путь к файлу.

            Вот так: http://wonderful-planet.ru/home/z/zuahm/zuahm.bget.ru/public_html/litosfera/75-gory.html?start=1

            А должно быть вот так: wonderful-planet.ru/litosfera/75-gory.html?start=1

            (Ссылочки прошу удалить после прочтения)

            Ответить
          • Зульфия (5 комм.)

            Мой последний комментарий почему-то не опубликовался — видимо, запрещено давать ссылки.

            Попытаюсь описать "на пальцах" возникшую проблему, не ссылаясь на конкретные страницы сайта.

            Ваш последний вариант кода убрал showall=& (что и требовалось), но между названием сайта и названием категории вставил длинный код (это путь к файлу, как я понимаю), а именно: /home/z/zuahm/zuahm.bget.ru/public_html/

            Сие, естественно, мне совершенно ни к чему... К тому же (что еще хуже) я, испугавшись, сразу стерла код в .htaccess, но ничего не изменилось. Все мои страницы теперь имеют этот длиннющий неудобоваримый адрес. Я уже начинаю скучать по коротенькому showall=& )))))

            Верно, видимо, говорят: "Лучшее — враг хорошего!". Уважаемый АлаичЪ, если я Вам еще не очень надоела, подскажите, пожалуйста, как мне вернуть все, как было, или, может быть, есть еще какие варианты? (Я все-таки не согласна с общепринятыми утверждениями и стараюсь по мере возможности использовать вариант "лучший")

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

              Вам необходимо перед правилами, что вы прописали по моей рекомендации добавить строку:

              RewriteBase /

              И тогда все будет пучком!

              Ответить
              • Зульфия (5 комм.)

                Урра!! Все получилось! Александр, спасибище Вам огромное! Теперь у меня на сайте стало намного меньше дублей :)

                Низкий Вам поклон и удачи во всех начинаниях!

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

    Не могу написать правильный .htaccess уже часов 10.

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

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

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

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

      RewriteCond %{HTTP_HOST} !^site.ru$ [NC]

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

      где site.ru — это новый домен (если он с www, то тут тоже надо указывать www.site.ru)

      И все!

      Ответить
  305. Валерия (3 комм.)

    Здравствуйте! Очень нужен совет опытных специалистов. Заказчик хочет перейти с лендинга на многостраничный сайт. Разрабатывается уникальный дизайн, пишутся новые тексты и все в этом духе. Однако на лендинге посещаемость есть и неплохая. Кроме того, пузомерки тоже не по нулям. Есть позиции в топе.

    Вопрос: Как быть? Возможно ли оставить лендинг и настроить с него 301 редирект на основной многостраничный сайт? Или возможно наложение фильтров, потому что контактные данные и название организации будут одинаковыми?

    Уничтожить лендинг?)) Или можно сделать так, чтобы все ништяки "перетекли" на многостраничник?

    Огромное спасибо.

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

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

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

        Спасибо огромное за оперативный ответ :) Три страницы на лендинге. Как думаете, если взять существующую страницу, подключить к ней другой css, заменить полностью код страницы.

        Текст: разместить новый, но он будет содержать в себе те же ключевые слова, по которым продвигался лендос. Может что-то получиться? Или это совсем бредовая идея?

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

          Не совсем улавливаю и смысл и идею... Так что хз.

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

    Добрый вечер!

    Перечитал множество статей, но не знаю как лучше убрать index.html? и слеши в конце:

    https://www.site.com/index.html?/dobavki_pishchevye.html/

    А также вопрос с точкой в конце www.site.com. при данной загрузке сайта получается следующий вид в адресной строке: www.site.com///

    Как избавиться от этого?

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

    Доброго дня!

    По вашим рекомендациям настроил редиректы на вордпресс блоге: с www — на "без www", с .html на "без .html", позже добавился с http на https.

    Проблемка осталась (выявил не сразу): сам вордпресс хорошо всё переадресовывает, но вот несколько подписных страничек — независимых от вордпресс ( https://сайт/подкаталог/подписная/ ) — так и видны с www и без www.

    Как поступают в таких случаях? Сам что-то пытался делать, но фокусы мои результатов не дали...

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

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

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

    Вот такая беда, помогите!

    /blogs/entry/179-warface-blackwood-v-chernobyle/

    Страница перенаправляет робота на http://vasyhack.ru/index.php?/blogs/entry/179-warface-blackwood-v-chernobyle/. Проверьте индексирование цели редиректа.

    Ответить
  309. Айк (2 комм.)

    Всем привет!

    У меня такой вопрос:

    Что будет если удалить слово category и как это сделать БЕЗ плагина ?

    https://1informer.com/noutbook-ultrabook/

    https://1informer.com/category/noutbook-ultrabook/

    В индексе страницы без category

    Ответить
  310. Людмила (1 комм.)

    Есть такая проблема — 2 сайта, старый и новый. На старом есть pdf документ, к которому существуют внешние ссылки. На новом тоже есть такой же документ. Есть ли способ сделать редирект с документа pdf на старом сайте к аналогичному документу на новом?

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

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

    .htacces такой:

    AddDefaultCharset UTF-8

    RewriteEngine On

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

    RewriteRule ^(.*) index\.(php|html|htm)$ https://xn--80aejao2abt.xn--p1ai/ [R=301,L]

    RewriteCond %{SERVER_PORT} !^443$

    RewriteCond %{HTTPS} off

    RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]

    ErrorDocument 404 https://xn--80aejao2abt.xn--p1ai/404.php

    При наборе в адресной строке https://равнение.рф/index.html выкидывает на страницу ошибки 404.php.

    Хотя по вашей рекомендации установил редирект 301 чтобы попадать на https://равнение.рф.

    Почему у меня не работает?

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

    Привет. Спасибо за интересные статьи. А вопрос такой. На сайте Dle были чпу ссылки, потом я решил сделать обычные, но теперь при переходе по старым чпу-ссылкам выдается 404 ошибка. Как сделать редирект? Спасибо.

    Ответить
  313. alexey (1 комм.)

    Добрый день.

    URL содержит 5dddd (может начинаться, заканчиваться или стоять в середине) где каждое d цифра от 0 до 9

    Как написать правило чтобы такой URL перенаравлялся в URL вида site.ru/?p=5dddd

    Спасибо

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

    Как сделать редирект с адреса http://studies.in.ua/ru/administrativnoe-pravo-ukrainy-shpargalki/ на статическую страницу вида http://studies.in.ua/ru/admin-pravo-ukrainu.html

    Такой редирект не работает

    RewriteRule ^ru/administrativnoe-pravo-ukrainy-shpargalki/$ /ru/admin-pravo-ukrainu.html? [R=301,L]

    На сайте стоит модуль мультиязычности, он собственно и добавляет в адрес страницы такой текст /ru/

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

    Александр, добрый день!

    У меня на сайте каждый день появляется 404 ошибка при обращении google bot к текущей дате: site.ru/2018/08/04

    Я хочу в htaccess прописать переадресацию, чтобы любые символы после года игнорировались site.ru/2018 (.*) а переадресация, в этом случае, шла на site.ru Все перепробовал, но функция (.*) почему то не работает. Если не трудно, напишите пожалуйста пару строк с кодом.

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

    Здравствуйте, помогите пожалуйста, у меня сайт доступен по двум адресам

    https://anna-gorbunova.ru//

    и https://anna-gorbunova.ru

    https://anna-gorbunova.ru//pg39-IMG393.jpg

    https://anna-gorbunova.ru/pg39-IMG393.jpg

    откуда взялся этот // ???

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

      Почему вы у меня-то спрашиваете, откуда взялся? Значит где-то на сайте в ссылках так стоит.

      Ответить
  317. Alex777 (1 комм.)

    Движок dle, пользуюсь вашим советом https://alaev.info/blog/post/3294. Через проверку ответа сервера отдается код 200 по страницам http://site.ru, http://site.ru/, http://site.ru// и т.д., так же страницы открываются браузерами(а ваш сайт, так же отдает по проверке код 200, но браузер перенаправляется на верный). как это исправить и насколько это целесообразно для сео, ведь по идее это дубли..., искал что то подобное в инете и не нашел. Подскажите что делать?

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

      Вообще http://site.ru и http://site.ru/ — это одно и то же. Дальше, сколько там слешей в конце не добавляй, от этого спасти может canonical, если верно настроен. А так-то нет смысла об этом думать, никто не станет эти слеши генерировать специально, тут важно, чтобы таких ссылок не было внутри сайта. Если нет — нет и проблемы.

      Ответить
  318. Nnn (1 комм.)

    Скажите пожалуйста, как сделать правильный редирект, когда записи на сайте с http://www , а категории просто с http://. Переход на главную тоже просто http://. Как в таком случае перевести и категории и новости, что бы было в https://www и https:// ??

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

      Я ничего не понял. Но догадываюсь, что вам надо просто настроить 301-редирект с http на https — в таком случае в посте описано 8 способов, как это сделать. Попробуйте.

      Ответить
  319. Антип (2 комм.)

    Opencart — рассадник дублей)

    Был дубль главной с урлом /?do=feedback

    Исправил так:

    RewriteCond %{QUERY_STRING} ^feedback= [NC]

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

    Ответить
  320. Inwer (1 комм.)

    Советую вам инструмент https://c-wd.ru/tools/htaccess/ по быстрой настройке 301 редиректов в .htaccess

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

    Добрый день. Я приобрёл сайт, прежний хозяин делал манипуляции с переходом на https, но после вылета страниц из поиска передумал. Так вот, сайт http, яндекс индексирует страницы нормально, но гугл для себя переделал их на https. В итоге в вебмастере гугл выкинул из индекса все страницы и пишет что они дубли, а канонические страницы видимо https, но таких нет. В гугл поиске страницы моего сайта отображаются как https и при клике не открываются. Подскажите, если знаете, как сделать, чтобы гугл снова отображал страницы как http

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

      Два выхода.

      1. Более правильный: все же завершить переезд с 301 редиректом на https через htacess со всеми соответствующими настройками, как раз недавно писали подробный мануал по переезду https://alaev.info/blog/post/6986

      2. Сделать 301 редирект с https на http через htaccess.

      Первый вариант более верный потому что сейчас тенденция к этому идет даже для инфосайтов, более подробно об этом написано по ссылке, что я привел.

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

    каким образом сделатm так, чтобы срабатываел редирект урл-а с уровнями больше 2ух?

    мы меняем в урл нижние подчеркивания на дефисы

    старый урл — http://usbflashki.ru/kartochki_fleshki/fleshka_kr-01/

    новый урл — http://usbflashki.ru/kartochki-fleshki/fleshka-kr-01/

    а нас редиректит только после первого слеша — http://usbflashki.ru/kartochki-fleshki/fleshka_kr-01/

    т.е. после второгослеша изменений нет

    прописали редирект вот так:

    RewriteEngine On

    RewriteBase /

    RewriteRule ^index.php$ — [L]

    RewriteCond %{REQUEST_FILENAME} !-f

    RewriteCond %{REQUEST_FILENAME} !-d

    RewriteRule . /index.php [L]

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

    Не нашёл решения по редиректу, может Вы подскажете.

    Категория доступна по любому адресу если добавить "/?":

    https://site.ru/category/ (правильный урл)

    https://site.ru/category/?erggeretvrjteyj (любая абра-кадабра после "/?") — дубль.

    Как правильно перенаправить или обрезать не нужные символы вот такого типа "?erggeretvrjtуrehcwefxt454veyj" для удаления дублей категории?

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

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

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

        Я правильно понял, что и не следует закрывать от индексирования подобные УРЛы через htaccess:

        Disallow: /*?*

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

          htaccess ничего не закрывает от индексации, он для другого служит.

          А вот robots.txt закрывает, и директива Disallow: /*?* как раз для него. Да, можно ее использовать, чтобы такие страницы не индексировались.

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

            Спасибо! Всё стало понятно.

            Ответить
  324. DimaN74 (1 комм.)

    Здравствуйте, подскажите пожалуйста как в файле .htaccess написать 301 редирект для страницы

    https://maltmill.ru/index.html

    на главную страницу

    https://maltmill.ru/

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

    Большое спасибо

    Дмитрий

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

      Во-первых, наличие или отсутствие слеша на конце для главной не имеет значения. И вообще браузер не отображает слеш в конце адреса для любой главной страницы. Не придумывайте проблем на пустом месте.

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

      Ответить
      • DimaN174 (5 комм.)

        не отображается, но и тот и другой ( со слешем и без) адрес дают отклик 200 ок

        т.е. Ваш пример производит переадресацию на страницу со слешем?

        Ответить
  325. DimaN174 (5 комм.)

    https://maltmill.ru/var/www/u0634658/data/www/maltmill.ru/

    сюда происходит переадресация после вставки редиректа главной страницы из Вашего примера (с HTML на без HTML)

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

      Потому что перед редиректом надо писать RewriteBase /

      Ответить
      • DimaN174 (5 комм.)

        Спасибо, заработало!!!

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

    есть две категории

    1. https://medicrashodka.ru/medicinskie-shapochki

    2. https://medicrashodka.ru/meditsinskie-kolpaki

    хочу их объединить в одну https://medicrashodka.ru/golovnie-ubori

    и те станут подкатегориями

    https://medicrashodka.ru/golovnie-ubori/medicinski...

    https://medicrashodka.ru/golovnie-ubori/meditsinsk...

    также в них есть товары. как их задиректить или же ручками писать каждый товар

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

      Категории заредиректить, понятное дело. С товарами не знаю, зависит от того, как формировался url. Если в url товара присутствовало название категории... Тут либо просто редиректить все товары на новую родительскую категорию, либо поштучно каждый на новый url редиректить.

      Ответить
  327. DimaN174 (5 комм.)

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

    подскажите пожалуйста, как решить проблему с дублями:

    имеются дубли страниц типа (код статуса HTTP 200 ok в яндекс-вебмастер)

    http://maltmill.ru/kontakty/

    https://maltmill.ru/kontakty.html

    всего пять аналогичных пар дублей.

    При этом страницы с протоколом http отсутствуют физически, но числятся в поиске.

    Для того, чтобы удалить страницы из поиска я запретил доступ к страницам типа http://maltmill.ru/kontakty/ в файле robots.txt. Отключаю 301 редирект с HTTP на HTTPS (чтобы был доступ к файлу http://maltmill.ru/robots.txt) . Страницы удаляются, дают отклик 404. Но после возврата 301 редиректа опять появляются в поиске.

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

      А зачем их запрещать? Просто с дубля ставим 301-редирект на основную страницу. Со временем пропадут. А еще как вариант — поставить каноникал, тогда точно пропадут.

      Ответить
      • DimaN174 (5 комм.)

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

        Спасибо!

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

    Здравствуйте, подскажите, пожалуйста. Прописал в файле .htaccess такие строки:

    Redirect 301 /ru/catalog/grupa/43 /semena-saxarnoj-kukuruzy

    что-бы редиректило с удалённой страницы http://site.com/ru/catalog/grupa/43 на новую страницу http://site.com/semena-saxarnoj-kukuruzy

    Но в результате, в браузере к адресу добавляются символы — ?q=ru/catalog/grupa/43 и редиректит на адрес http://site.com/semena-saxarnoj-kukuruzy/?q=ru/catalog/grupa/43

    Пробовал разные варианты, но или вообще не работает редирект, или тоже самое выдаёт.

    Кто знает как побороть или сталкивался с таким?

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

      Вот такую строку вместо своей используй:

      RewriteRule (.*)/ru/catalog/grupa/43$ http://site.com/semena-saxarnoj-kukuruzy/? [R=301,L]

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

        Спасибо что откликнулись так быстро.

        Попробовал Ваш вариант:

        RewriteRule (.*)/ru/catalog/grupa/43$ http://site.com/semena-saxarnoj-kukuruzy/? [R=301,L]

        но он не хочет работать, переадресация не срабатывает. Опять пробую разные варианты, но та же история.

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

    Решил проблему так:

    написал перед секцией # The Friendly URLs part

    такие строки:

    RewriteCond %{REQUEST_URI} ^\/ru\/catalog\/grupa\/43$

    RewriteRule (.*) /semena-saxarnoj-kukuruzy [R=301,L]

    Ответить
  330. fortress-design (2 комм.)

    Ни один из предложенных вариантов 301 редиректа с http на https не подошел: происходит циклическая переадресация.

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

      Я на днях все свои проекты на https переводил, использовал везде такой вариант:

      	RewriteCond %{HTTPS} off
      	RewriteCond %{HTTP:X-Forwarded-Proto} !https
      	RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

      Везде (совершенно разные движки все) сработало и без косяков. Его пробовал?

      Ответить
  331. Павел (1 комм.)

    Здравствуйте АлаичЪ! Доброго вам времени суток! Вы не могли бы подсказать решение вопроса с удалением дублей на нашем сайте. Вот пример страницы на которую в индексе есть дубль.

    Основная:

    site.ru/catalog/askessuari/SHejnye-platki-muzhskie/muzhskoi sheinyi platok 010

    Дубль:

    site.ru/catalog/askessuari/SHejnye-platki-muzhskie/muzhskoi+sheinyi+platok+010

    URL организуется скриптом таким образом: если страница в иерархии сайта лежит в каком нибудь подразделе определённого раздела, в адресной строке получается catalog/ потом алиасы раздела и если есть подраздел, то и плюс алиас подраздела, далее алиас в карточке товара.

    Суть вопроса вот в чём. Дубль насколько я понял получается тогда когда в алиасе, в карточке товара существуют пробелы а не знак нижнего подчёркивания (_).

    Как вернее поступить?

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

    б) В файле .htaccess с помощью деректив что вы описали в статье. Тогда в этом варианте у меня возникает вопрос как правильно прописать директиву чтобы шёл редирект c url где пробелы заменяются плюсами на url где просто пробел.

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

      Надо сначала решить вопрос внутри, то есть привести все url к единому стандарту, то есть пробелы лучше заменять на нижнее подчеркивание _. Все же пробелы использовать не стоит по причине их неоднозначности (что мы и видим в данном случае). А уже после того, как будет выработан единый стандарт внутри, чтобы все страницы были доступны по нужным нам url, вот тогда стоит сражаться с дублями с помощью редиректов или каноникалов.

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

      Ответить
  332. Виктор (2 комм.)

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

    Как сделать редирект, если идет переход на страницу site.ru/cveti/] — отдает ответ 404, надо чтобы редиректил на site.ru/cveti/ — правильный урл.

    Ответить
  333. АлаичЪ

    Попробуй такой код вставить после RewriteEngine On:

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

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

    Здравствуйте. Вот переехали с diamant.kiev.ua на diamant.ua, но в выдаче Google до сих пор в урлах встречаются старые урлы. Программисты сделали так, что старая версия сайта полностью доступна только по внутреннему IP, а при всех иных срабатывает 301 редирект. Как быть? Это может негативно влиять на новую версию сайта? И что с этим делать?

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

      Я думаю, все ок. Поисковые роботы не смогут заходить под вашим ip, поэтому для них всегда будет срабатывать 301-редирект.

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

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

        В марте сделали переезд с сайта https://diamant.kiev.ua на https://diamant.ua, с основных страниц настроили программисты 301 редиректы, но в сниппетах url со старого сайта заметить можно, а также в индексе, хотя если смотреть кеш Гугла, то в Кеше уже страницы новой версии сайта. Программисты старую версию сайта сделали доступной по внутреннему IP адресу, мотивируя это тем, что админка работает на старой версии домена. Может ли это быть проблемой и негативно влиять на новый сайт? С индекса старые урлы не удаляются до сих пор...

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

          Сори что 2 раза спросил. После первого раза проверял — комментарий чего-то не добавлялся.

          Ответить
  335. Дмитрий (10 комм.)

    Доброго времени суток!

    Пытаюсь избавиться от дублей https://technostok.net/?id=7777 и https://technostok.net/index.php

    В файле htaccess прописал следующее:

    RewriteEngine On
    RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.(php|html|htm)\ HTTP/ 
    RewriteRule ^(.*)index\.(php|html|htm)$ $1 [R=301,L]

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

    Но редиректы не работают, сайт на битриксе. Подскажите пожалуйста что не так сделал. Заранее спасибо за ответ

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

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

      Может быть, сам Битрикс как-то препятствует этому.

      А еще бывает, что сервер кеширует и редиректы не срабатывают (можно попробовать очистить весь кеш, открыть сайт в другом браузере).

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

        Прописывал сразу после строки RewriteEngine On (в таком виде как писал в вопросе). Сами правила верно написаны?

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

          Ну да, сами правила корректные. Рекомендую обратиться к хостеру с вопросом, а то всякое бывает...может, например, надо прописывать правила через панель управления какую-нибудь.

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

            Спасибо вам большое Александр!

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

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

    столкнулся с проблемой на bitrix, прописал следующие директивы в файле htaccess:

    RewriteEngine On
    RewriteCond %{THE_REQUEST} ^[A-Z]{3,9} /index.(php|html|htm) HTTP/ 
    RewriteRule ^(.*)index.(php|html|htm)$ / [R=301,L]
    RewriteCond %{QUERY_STRING} ^id=([0-9]*)$ [NC]
    RewriteRule ^(.*)$ /? [R=301,L]

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

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

      Возможно, что там заказ обрабатывается с параметром ?id=

      Можете показать, какой там url заказа, подумаем, как ограничить редиректы для мобильного приложения.

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

        URL заказа http://prntscr.com/pcq3nm

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

          Вообще-то не совпадает с правилами редиректа...странно.

          Тем не менее, попробуй удалить сначала эти две строки:

          RewriteCond %{THE_REQUEST} ^[A-Z]{3,9} /index.(php|html|htm) HTTP/
          RewriteRule ^(.*) index.(php|html|htm)$ / [R=301,L]

          Потом эти:

          RewriteCond %{QUERY_STRING} ^id=([0-9]*)$ [NC]
          RewriteRule ^(.*)$ /? [R=301,L]

          Тогда будем знать, в чем же дело.

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

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

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

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

              Ответить
  337. Макчон (6 комм.)

    АлаичЪ, уважаемый, выручай! Мозг кипит у чайника! Когда читаешь — вроде все понятно. До дела доходит — катаклизм. В свое время не особо заморочился с нормальной структурой, а теперь требует душа восстановления справедливости. Ситуацию обрисую на одном примере. Есть на сайте рубрика (Х) в которой находятся статьи. Необходимо эту рубрику мало того, что разделить на две(Х1 и Х2), так еще и дополнить подрубриками (Y и Y1) и, разумеется, статьи раскидать по ним. Понимаю, что придется для каждой статьи писать свой редирект, но что-то не в состоянии осмыслить как. В качестве примера могешь написать один пример из такого варианта, чтобы смог визуально увидеть и разобраться как такое сделать? Блин, иначе пойду рыбу ловить на Ангару.

    С уважением

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

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

      Redirect 301 /category/page-name1.html https://site.ru/newcategory/subcategory/page-name1.html

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

      Ответить
      • Макчон (6 комм.)

        Благодарствую, АлаичЪ! Значит рыбалка отменяется.

        Ответить
  338. Макчон (6 комм.)

    АлаичЪ! Здравствуй, уважаемый. Я вновь за советом и разъяснениями. Ситуация следующая. На Денвере перелопатил своего "мальчика для битья". Решился таки структуру переделать. И тут натолкнулся на один сюжет. Статья, как и положено, находится в определенной рубрике. С главной страницы кликаешь — открывается. При этом в адресной строке числится только домен и сама статья. Названия рубрики нет. Когда добавляешь в строку еще и имя рубрики (все таки статья лежит там), то проходит ошибка 404 и идет перенаправление на главную сайта. Вот и возник вопрос, а стоило ли мне заморачиваться и писать редиректы для каждой статьи при переводе ее в новую рубрику? Может в данной ситуации можно было просто раскидать посты по новой структуре и отдать на съедение поисковику, раз "старые" рубрики в поиске не участвуют?

    С уважением

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

      Привет. Я думаю, это зависит от CMS и конкретной ситуации. Я не вижу ничего плохого в том, что url статей формируется от корня и рубрика в нем отсутствует, это позволит каждую статью помещать в несколько рубрик, не боясь дублирования.

      Видимо, и не стоило заморачиваться.

      PS Но тут есть вопрос "проходит ошибка 404 и идет перенаправление" — так все же 404 или редирект? Это принципиально, либо 404 Not Found, либо 301 Redirect Permanent.

      Ответить
      • Макчон (6 комм.)

        Да просто рядом с фавиконкой пишется, что стараница не найдена, далее слеш и название сайта с перенаправлением на главную. Надо, наверное, "в живую" эксперимент поставить с одной небольшой рубрикой. Добавить подрубрики, раскидать пару статей. Если что — вернуть на место. Глядишь и проясниться.

        С уважением

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

          Да, попробуй, потому что пока не понятно, что к чему.

          Ответить
  339. Роман (5 комм.)

    Привет АлаичЪ. Подскажи что сделать с самописным сайтом на php. Все редиректы стоят, и вроде сайт имеет один канонический вид site.ru, но заметил что сайт так же доступен по адресу site.ru. (с точкой в конце). Искал варианты решения, но ничего не помогает. Подскажи что делать в такой ситуации и как убрать эту точку.

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

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

      Это где и как? Покажи с примером, пожалуйста. Не припомню случаев, чтобы были дубли такого вида.

      Ответить
      • Роман (5 комм.)

        Например mail.ru производит редирект с домена с точкой в конце, на домен без точки. Не уверен критично ли это для поисковых систем, но думаю лучше перестраховаться

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

          Я хотел увидеть пример дублирования, то есть увидеть в индексе site.ru и site.ru.

          Ответить
  340. Озод (1 комм.)

    а можно изменить url языка с en на ru ?

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

      Не совсем понял, о чем идет речь. Приведи примеры?

      Ответить
  341. Игорь (1 комм.)

    Добрый день, у меня такой вопрос некоторые сайты делают редирект такого плана site.ru на w1.site.ru причем в выдаче у них индексируется только site.ru и так же при ответе сервера зеркала w1.site.ru мы получим следующее:

    Ответ "w1.site.ru" → Основной робот Яндекса

    Код статуса HTTP 301 Moved Permanently

    X-Powered-By: PHP/7.3.4

    Location: https://site.ru/

    CF-Cache-Status: DYNAMIC

    Vary: Accept-Encoding

    Server: cloudflare

    CF-RAY: 5560a6e29dfd4e34-DME

    Подскажите пожалуйста как они это делают? Я сеошник самоучка моих знаний и поиск в интернете не дал ясного ответа) Спасибо!

    Ответить
  342. Alex (1 комм.)

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

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

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

      Делайте лучше в два. Там надежнее.

      Ответить
  343. Alex (2 комм.)

    Подскажите код 301 редиректа, при смене структуры (разделов каталога) интернет магазина.

    Например, раньше все товары были в разделе /сatalog/auto/mashinki

    соотвественно, любой товар из такого раздела имеет урл вида: /сatalog/auto/mashinki/furgon-1

    Теперь этот раздел будет иметь вид: /katalog/mashinki

    Как прописать 301 редирект, чтобы все товары автоматом отдавали 301 редирект перемещения на новый раздел. То есть, допустим ввожу я в строку браузера

    https://mysite.ru/сatalog/auto/mashinki/furgon-1

    нажимаю энтер и меня 301 редиректит на

    https://mysite.ru/katalog/mashinki/furgon-1

    Подскажите пож-ста, как и какой надо прописать в таком случае код в .htaccess

    ?

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

      Вот так:

      RewriteRule ^сatalog/auto/mashinki/(.*)$ katalog/mashinki/$1 [R=301,L]
      Ответить
  344. Виталий (1 комм.)

    Добрый день! Спасибо за азы! Помогите, пожалуйста, создать такой редирект:

    из URL

    http://site.com/index.php?option=com_content&view=category&id=60&layout=blog&Itemid=89&limitstart=10

    Просто убрать параметр: &limitstart

    Чтобы срабатывал редирект на:

    http://site.com/index.php?option=com_content&view=category&id=60&layout=blog&Itemid=89

    Ответить
  345. Виктор (2 комм.)

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

    А возможно перенаправлять такие страницы 301 редиректом:

    /view.html?id=8

    /view.html?id=14

    /view.html?id=54

    /view.html?id=7

    на разные страницы каждый урл?

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

      Да, но для каждого адреса свой редирект будет, примерно такого вида:

      RewriteCond %{REQUEST_URI} ^(.*)?id=8
      RewriteRule ^(.*)?id=(.*)$ $1/somepage.html [R=301,L]
      Ответить
  346. Георгий (1 комм.)

    Добрый день, сайт у меня на дле, подключил модуль от балансера устора, и включил у них поддомены на свой сайт, и вот как можно сделать редерикт с разных моих поддоменов, которые уже сменились, на мой основной домен? как такое можно сделать? @georgiy_01 мой тг. думаю как то можно устроить, чтобы допустим сейчас уже сайт на v5 поддомене, и чтобы все ранее доступные v1,v2,v3,v4 кидало на мой основной домен, а он уже автоматом через модуль усторе будет кидать на действующий поддомен.

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

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

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

    Упрощенно структура такая:

    site.ru/dir1/dir2/mod1.html

    site.ru/dir1/dir2/mod2.php

    site.ru/dir1/dir2/fs/f1.txt

    ...

    site.ru/dir1/dir2/fs/fn.txt

    При этом, в папке fs количество файлов f1.txt — fn.txt увеличивается автоматически.

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

    RewriteBase /

    RewriteCond %{ENV:REDIRECT_STATUS} ^$

    RewriteRule ^dir1/dir2.* /dir2 [R=301,L]

    RewriteRule ^dir2.* /dir1/dir2/mod1.html [L]

    А необходим программный доступ сразу ко всему содержимому папки dir2 .

    Мне представляется решение должно быть такое:

    RewriteBase /

    RewriteCond %{ENV:REDIRECT_STATUS} ^$

    RewriteRule ^dir1/dir2.* /dir2 [R=301,L]

    RewriteRule ^dir2 (.*) /dir1/dir2/(.*) [L]

    Но в этом случае возникает отсутствие прав доступа и ошибка 403

    Буду очень благодарен за подсказку правильного решения.

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

    Ответить
  348. Антон (1 комм.)

    Привет, подскажи для чайника. Если делать замену страницу А на В и ставлю 301 редирект (А 301 В) что делать со страницей А просто удалить?

    Ответить
  349. Любомир (1 комм.)

    Добрый день! В Apache прописан RewriteRule типа:

    RewriteRule /bus/(.*) https:// Если тестить редирект через Постман, не передается токен в заголовке, как принудительно указать что пробрасывается токен?

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

    Здравствуйте. Нужно сделать следующую задачу на Джумле: "Необходимо поставить общий 301 редирект всего сайта со страниц с «/» на конце без «/» на конце и со страниц с «www» на страницы без «www», заменить все ссылки на

    сайте с «www». Кто поможет?

    Ответить
  351. Людмила (1 комм.)

    На сайте есть оригинальная страница:

    https://site.ru/ritual-graf/filter/type_photo-is-angely/apply/

    И есть её дубль:

    https://site.ru/ritual-graf/filter/type_photo-is-angely/apply/angelok-6.html

    У страниц одинаковые SEO данные, но разное содержание.

    Как избавиться от дубля — прописать ему 301 редирект, или rel="canonical", или ещё что.

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

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

      Можно и так, и так сделать. Хотя rel="canonical" не поможет (точнее сказать — не всегда сработает), если контент разный.

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

    Добрый день.

    В какой-то момент яндекс напридумывал себе такие урлы, а движок ему не отказывал:

    https://site.ru/index.php?cat=9&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;page=2

    https://site.ru/index.php?cat=9&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;page=2

    Для каждой реальной страницы наплодилось много вариантов с вхождениями "amp;" разного кол-ва.

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

    Никак не получается убить "amp;":

    RewriteCond %{REQUEST_URI} ^(.*&)(amp;){1,}(.*?)$

    RewriteRule . %1%3 [L,R=301]

    Экранирование знака вопроса не помогает, но когда из урла убираю вопрос, то правило работает.

    Тестирую регулярку для .htaccess вот тут: https://htaccess.madewithlove.com?share=5fb86b93-a9ee-491f-9230-ad59c1f421ae

    Помогите пожалуйста

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

      Давай попробуем просто для начала убрать amp и все, что идет далее. Нам не критично, если в конце пропадет page, ведь кроме поисковика по таким ссылкам никто не ходит, а наша цель уничтожить дубли. Такой вот код:

      RewriteCond %{REQUEST_URI} ^(.*)&amp
      RewriteRule ^(.*)&amp(.*)$ $1 [R=301,L]
      Ответить
      • Андрей (2 комм.)

        Нет, не срабатывает. Тестилка htaccess.madewithlove.com ошибку выдает, что регулярка не найдена.

        И на самом сайте урл не меняется тоже

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

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

          Если ты найдешь решение, обязательно поделись, уверен, кому-то это будет полезно!

          Ответить
  353. Артур (1 комм.)

    Добрый день!

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

    http://www.site.com/?t_link=pimp3174%3Aft%3Asmaxipp%3A%3A13%3A1%3Acodes

    Должна вести на:

    https://site2.com

    Изначально боролся с символом "?", использовал ваше решение:

    RewriteCond %{QUERY_STRING} ^t_link= [NC]

    RewriteRule (.*) https://site2.com/? [R=301,L]

    Но оно работает, пока не вводишь в url знак "%". Так я понял, что мне нужно еще и бороться с "%".

    Какое может быть универсальное решение, чтобы редирект срабатывал, когда в url есть и "?", и "%"?

    Ответить
  354. Дима (1 комм.)

    Всем Привет! Сайт на битриксе, (/catalog/kvadrotsikly/stels_1/ такая страница сущестует) при переходе на несуществующую страницу(/catalog/kvadrotsikly/stels_123) , показывает её родительскую (/catalog/kvadrotsikly), как это исправить? код Htaccess Options -Indexes

    ErrorDocument 404 /404.php

    RewriteEngine On

    # ASPRO_SITEMAP_sitemap-files Serve sitemap.xml with sitemap.php only if the latter exists

    RewriteCond %{REQUEST_FILENAME} sitemap-files.xml$

    RewriteCond %{DOCUMENT_ROOT}/sitemap-files.php -f

    RewriteRule ^(.*)$ /sitemap-files.php [L]

    # ASPRO_SITEMAP_sitemap-iblock-13 Serve sitemap.xml with sitemap.php only if the latter exists

    RewriteCond %{REQUEST_FILENAME} sitemap-iblock-13.xml$

    RewriteCond %{DOCUMENT_ROOT}/sitemap-iblock-13.php -f

    RewriteRule ^(.*)$ /sitemap-iblock-13.php [L]

    # ASPRO_SITEMAP_sitemap-iblock-18 Serve sitemap.xml with sitemap.php only if the latter exists

    RewriteCond %{REQUEST_FILENAME} sitemap-iblock-18.xml$

    RewriteCond %{DOCUMENT_ROOT}/sitemap-iblock-18.php -f

    RewriteRule ^(.*)$ /sitemap-iblock-18.php [L]

    # ASPRO_SITEMAP_sitemap-iblock-19 Serve sitemap.xml with sitemap.php only if the latter exists

    RewriteCond %{REQUEST_FILENAME} sitemap-iblock-19.xml$

    RewriteCond %{DOCUMENT_ROOT}/sitemap-iblock-19.php -f

    RewriteRule ^(.*)$ /sitemap-iblock-19.php [L]

    # ASPRO_SITEMAP_sitemap-iblock-20 Serve sitemap.xml with sitemap.php only if the latter exists

    RewriteCond %{REQUEST_FILENAME} sitemap-iblock-20.xml$

    RewriteCond %{DOCUMENT_ROOT}/sitemap-iblock-20.php -f

    RewriteRule ^(.*)$ /sitemap-iblock-20.php [L]

    # ASPRO_SITEMAP_sitemap-iblock-21 Serve sitemap.xml with sitemap.php only if the latter exists

    RewriteCond %{REQUEST_FILENAME} sitemap-iblock-21.xml$

    RewriteCond %{DOCUMENT_ROOT}/sitemap-iblock-21.php -f

    RewriteRule ^(.*)$ /sitemap-iblock-21.php [L]

    # ASPRO_SITEMAP_sitemap-iblock-22 Serve sitemap.xml with sitemap.php only if the latter exists

    RewriteCond %{REQUEST_FILENAME} sitemap-iblock-22.xml$

    RewriteCond %{DOCUMENT_ROOT}/sitemap-iblock-22.php -f

    RewriteRule ^(.*)$ /sitemap-iblock-22.php [L]

    # ASPRO_SITEMAP_sitemap-iblock-23 Serve sitemap.xml with sitemap.php only if the latter exists

    RewriteCond %{REQUEST_FILENAME} sitemap-iblock-23.xml$

    RewriteCond %{DOCUMENT_ROOT}/sitemap-iblock-23.php -f

    RewriteRule ^(.*)$ /sitemap-iblock-23.php [L]

    # ASPRO_SITEMAP_sitemap-iblock-25 Serve sitemap.xml with sitemap.php only if the latter exists

    RewriteCond %{REQUEST_FILENAME} sitemap-iblock-25.xml$

    RewriteCond %{DOCUMENT_ROOT}/sitemap-iblock-25.php -f

    RewriteRule ^(.*)$ /sitemap-iblock-25.php [L]

    # ASPRO_SITEMAP_sitemap-iblock-26 Serve sitemap.xml with sitemap.php only if the latter exists

    RewriteCond %{REQUEST_FILENAME} sitemap-iblock-26.xml$

    RewriteCond %{DOCUMENT_ROOT}/sitemap-iblock-26.php -f

    RewriteRule ^(.*)$ /sitemap-iblock-26.php [L]

    # ASPRO_SITEMAP_sitemap-iblock-27 Serve sitemap.xml with sitemap.php only if the latter exists

    RewriteCond %{REQUEST_FILENAME} sitemap-iblock-27.xml$

    RewriteCond %{DOCUMENT_ROOT}/sitemap-iblock-27.php -f

    RewriteRule ^(.*)$ /sitemap-iblock-27.php [L]

    # ASPRO_SITEMAP_sitemap-iblock-29 Serve sitemap.xml with sitemap.php only if the latter exists

    RewriteCond %{REQUEST_FILENAME} sitemap-iblock-29.xml$

    RewriteCond %{DOCUMENT_ROOT}/sitemap-iblock-29.php -f

    RewriteRule ^(.*)$ /sitemap-iblock-29.php [L]

    # ASPRO_SITEMAP_sitemap-iblock-31 Serve sitemap.xml with sitemap.php only if the latter exists

    RewriteCond %{REQUEST_FILENAME} sitemap-iblock-31.xml$

    RewriteCond %{DOCUMENT_ROOT}/sitemap-iblock-31.php -f

    RewriteRule ^(.*)$ /sitemap-iblock-31.php [L]

    # ASPRO_SITEMAP_sitemap-iblock-32 Serve sitemap.xml with sitemap.php only if the latter exists

    RewriteCond %{REQUEST_FILENAME} sitemap-iblock-32.xml$

    RewriteCond %{DOCUMENT_ROOT}/sitemap-iblock-32.php -f

    RewriteRule ^(.*)$ /sitemap-iblock-32.php [L]

    # ASPRO_SITEMAP_sitemap-iblock-33 Serve sitemap.xml with sitemap.php only if the latter exists

    RewriteCond %{REQUEST_FILENAME} sitemap-iblock-33.xml$

    RewriteCond %{DOCUMENT_ROOT}/sitemap-iblock-33.php -f

    RewriteRule ^(.*)$ /sitemap-iblock-33.php [L]

    # ASPRO_SITEMAP_sitemap-iblock-36 Serve sitemap.xml with sitemap.php only if the latter exists

    RewriteCond %{REQUEST_FILENAME} sitemap-iblock-36.xml$

    RewriteCond %{DOCUMENT_ROOT}/sitemap-iblock-36.php -f

    RewriteRule ^(.*)$ /sitemap-iblock-36.php [L]

    # ASPRO_SITEMAP_sitemap-iblock-5 Serve sitemap.xml with sitemap.php only if the latter exists

    RewriteCond %{REQUEST_FILENAME} sitemap-iblock-5.xml$

    RewriteCond %{DOCUMENT_ROOT}/sitemap-iblock-5.php -f

    RewriteRule ^(.*)$ /sitemap-iblock-5.php [L]

    # ASPRO_SITEMAP_sitemap-iblock-7 Serve sitemap.xml with sitemap.php only if the latter exists

    RewriteCond %{REQUEST_FILENAME} sitemap-iblock-7.xml$

    RewriteCond %{DOCUMENT_ROOT}/sitemap-iblock-7.php -f

    RewriteRule ^(.*)$ /sitemap-iblock-7.php [L]

    # ASPRO_SITEMAP_sitemap Serve sitemap.xml with sitemap.php only if the latter exists

    RewriteCond %{REQUEST_FILENAME} sitemap.xml$

    RewriteCond %{DOCUMENT_ROOT}/sitemap.php -f

    RewriteRule ^(.*)$ /sitemap.php [L]

    # ASPRO_ROBOTS Serve sitemap.xml with sitemap.php only if the latter exists

    RewriteCond %{REQUEST_FILENAME} robots.txt$

    RewriteCond %{DOCUMENT_ROOT}/robots.php -f

    RewriteRule ^(.*)$ /robots.php [L]

    <IfModule mod_php5.c>

    php_flag allow_call_time_pass_reference 1

    php_flag session.use_trans_sid off

    #php_value display_errors 1

    #php_value mbstring.internal_encoding UTF-8

    </IfModule>

    <IfModule mod_rewrite.c>

    Options +FollowSymLinks

    RewriteEngine On

    # ASPRO_SITEMAP_sitemap-files Serve sitemap.xml with sitemap.php only if the latter exists

    RewriteCond %{REQUEST_FILENAME} sitemap-files.xml$

    RewriteCond %{DOCUMENT_ROOT}/sitemap-files.php -f

    RewriteRule ^(.*)$ /sitemap-files.php [L]

    # ASPRO_SITEMAP_sitemap-iblock-13 Serve sitemap.xml with sitemap.php only if the latter exists

    RewriteCond %{REQUEST_FILENAME} sitemap-iblock-13.xml$

    RewriteCond %{DOCUMENT_ROOT}/sitemap-iblock-13.php -f

    RewriteRule ^(.*)$ /sitemap-iblock-13.php [L]

    # ASPRO_SITEMAP_sitemap-iblock-18 Serve sitemap.xml with sitemap.php only if the latter exists

    RewriteCond %{REQUEST_FILENAME} sitemap-iblock-18.xml$

    RewriteCond %{DOCUMENT_ROOT}/sitemap-iblock-18.php -f

    RewriteRule ^(.*)$ /sitemap-iblock-18.php [L]

    # ASPRO_SITEMAP_sitemap-iblock-19 Serve sitemap.xml with sitemap.php only if the latter exists

    RewriteCond %{REQUEST_FILENAME} sitemap-iblock-19.xml$

    RewriteCond %{DOCUMENT_ROOT}/sitemap-iblock-19.php -f

    RewriteRule ^(.*)$ /sitemap-iblock-19.php [L]

    # ASPRO_SITEMAP_sitemap-iblock-20 Serve sitemap.xml with sitemap.php only if the latter exists

    RewriteCond %{REQUEST_FILENAME} sitemap-iblock-20.xml$

    RewriteCond %{DOCUMENT_ROOT}/sitemap-iblock-20.php -f

    RewriteRule ^(.*)$ /sitemap-iblock-20.php [L]

    # ASPRO_SITEMAP_sitemap-iblock-21 Serve sitemap.xml with sitemap.php only if the latter exists

    RewriteCond %{REQUEST_FILENAME} sitemap-iblock-21.xml$

    RewriteCond %{DOCUMENT_ROOT}/sitemap-iblock-21.php -f

    RewriteRule ^(.*)$ /sitemap-iblock-21.php [L]

    # ASPRO_SITEMAP_sitemap-iblock-22 Serve sitemap.xml with sitemap.php only if the latter exists

    RewriteCond %{REQUEST_FILENAME} sitemap-iblock-22.xml$

    RewriteCond %{DOCUMENT_ROOT}/sitemap-iblock-22.php -f

    RewriteRule ^(.*)$ /sitemap-iblock-22.php [L]

    # ASPRO_SITEMAP_sitemap-iblock-23 Serve sitemap.xml with sitemap.php only if the latter exists

    RewriteCond %{REQUEST_FILENAME} sitemap-iblock-23.xml$

    RewriteCond %{DOCUMENT_ROOT}/sitemap-iblock-23.php -f

    RewriteRule ^(.*)$ /sitemap-iblock-23.php [L]

    # ASPRO_SITEMAP_sitemap-iblock-25 Serve sitemap.xml with sitemap.php only if the latter exists

    RewriteCond %{REQUEST_FILENAME} sitemap-iblock-25.xml$

    RewriteCond %{DOCUMENT_ROOT}/sitemap-iblock-25.php -f

    RewriteRule ^(.*)$ /sitemap-iblock-25.php [L]

    # ASPRO_SITEMAP_sitemap-iblock-26 Serve sitemap.xml with sitemap.php only if the latter exists

    RewriteCond %{REQUEST_FILENAME} sitemap-iblock-26.xml$

    RewriteCond %{DOCUMENT_ROOT}/sitemap-iblock-26.php -f

    RewriteRule ^(.*)$ /sitemap-iblock-26.php [L]

    # ASPRO_SITEMAP_sitemap-iblock-27 Serve sitemap.xml with sitemap.php only if the latter exists

    RewriteCond %{REQUEST_FILENAME} sitemap-iblock-27.xml$

    RewriteCond %{DOCUMENT_ROOT}/sitemap-iblock-27.php -f

    RewriteRule ^(.*)$ /sitemap-iblock-27.php [L]

    # ASPRO_SITEMAP_sitemap-iblock-29 Serve sitemap.xml with sitemap.php only if the latter exists

    RewriteCond %{REQUEST_FILENAME} sitemap-iblock-29.xml$

    RewriteCond %{DOCUMENT_ROOT}/sitemap-iblock-29.php -f

    RewriteRule ^(.*)$ /sitemap-iblock-29.php [L]

    # ASPRO_SITEMAP_sitemap-iblock-31 Serve sitemap.xml with sitemap.php only if the latter exists

    RewriteCond %{REQUEST_FILENAME} sitemap-iblock-31.xml$

    RewriteCond %{DOCUMENT_ROOT}/sitemap-iblock-31.php -f

    RewriteRule ^(.*)$ /sitemap-iblock-31.php [L]

    # ASPRO_SITEMAP_sitemap-iblock-32 Serve sitemap.xml with sitemap.php only if the latter exists

    RewriteCond %{REQUEST_FILENAME} sitemap-iblock-32.xml$

    RewriteCond %{DOCUMENT_ROOT}/sitemap-iblock-32.php -f

    RewriteRule ^(.*)$ /sitemap-iblock-32.php [L]

    # ASPRO_SITEMAP_sitemap-iblock-33 Serve sitemap.xml with sitemap.php only if the latter exists

    RewriteCond %{REQUEST_FILENAME} sitemap-iblock-33.xml$

    RewriteCond %{DOCUMENT_ROOT}/sitemap-iblock-33.php -f

    RewriteRule ^(.*)$ /sitemap-iblock-33.php [L]

    # ASPRO_SITEMAP_sitemap-iblock-36 Serve sitemap.xml with sitemap.php only if the latter exists

    RewriteCond %{REQUEST_FILENAME} sitemap-iblock-36.xml$

    RewriteCond %{DOCUMENT_ROOT}/sitemap-iblock-36.php -f

    RewriteRule ^(.*)$ /sitemap-iblock-36.php [L]

    # ASPRO_SITEMAP_sitemap-iblock-5 Serve sitemap.xml with sitemap.php only if the latter exists

    RewriteCond %{REQUEST_FILENAME} sitemap-iblock-5.xml$

    RewriteCond %{DOCUMENT_ROOT}/sitemap-iblock-5.php -f

    RewriteRule ^(.*)$ /sitemap-iblock-5.php [L]

    # ASPRO_SITEMAP_sitemap-iblock-7 Serve sitemap.xml with sitemap.php only if the latter exists

    RewriteCond %{REQUEST_FILENAME} sitemap-iblock-7.xml$

    RewriteCond %{DOCUMENT_ROOT}/sitemap-iblock-7.php -f

    RewriteRule ^(.*)$ /sitemap-iblock-7.php [L]

    # ASPRO_SITEMAP_sitemap Serve sitemap.xml with sitemap.php only if the latter exists

    RewriteCond %{REQUEST_FILENAME} sitemap.xml$

    RewriteCond %{DOCUMENT_ROOT}/sitemap.php -f

    RewriteRule ^(.*)$ /sitemap.php [L]

    # ASPRO_ROBOTS Serve sitemap.xml with sitemap.php only if the latter exists

    RewriteCond %{REQUEST_FILENAME} robots.txt$

    RewriteCond %{DOCUMENT_ROOT}/robots.php -f

    RewriteRule ^(.*)$ /robots.php [L]

    RewriteCond %{REQUEST_FILENAME} !-f

    RewriteCond %{REQUEST_FILENAME} !-l

    RewriteCond %{REQUEST_FILENAME} !-d

    RewriteCond %{REQUEST_FILENAME} !/bitrix/urlrewrite.php$

    RewriteRule ^(.*)$ /bitrix/urlrewrite.php [L]

    RewriteRule .* — [E=REMOTE_USER:%{HTTP:Authorization}]

    </IfModule>

    <IfModule mod_dir.c>

    DirectoryIndex index.php index.html

    </IfModule>

    <IfModule mod_expires.c>

    ExpiresActive on

    ExpiresByType image/jpeg "access plus 3 day"

    ExpiresByType image/gif "access plus 3 day"

    </IfModule>

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

      Дело не в этом коде, а в настройках самого Битрикса.

      А что не так в поведении и текущем сценарии работы? Как по мне, хорошее решение.

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

    Добрый день! А возможно поподробнее один момент настройки редиректа? К примеру товар поменял место расположения на сайте (с одной категории переехал в другую), т.е немного изменился URL (Пример:,был site.ru/ofisnye-svetilniki/vstraivaemye-ofisnye-svetilniki/le-svo-03-020-0496-20d-svetodiodnyj-vstraivaemyj-svetilnik-serii-ofis-svo.html переехал на: site.ru/arhiv-svetilnikov/le-svo-03-020-0496-20d-svetodiodnyj-vstraivaemyj-svetilnik-serii-ofis-svo.html). Какую команду необходимо прописать или необходимо прописывать для каждого товара? Спасибо!

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

      Для каждой страницы надо будет прописывать в htaccess такой редирект:

      Redirect 301 /ofisnye-svetilniki/vstraivaemye-ofisnye-svetilniki/le-svo-03-020-0496-20d-svetodiodnyj-vstraivaemyj-svetilnik-serii-ofis-svo.html httpы://site.ru/arhiv-svetilnikov/le-svo-03-020-0496-20d-svetodiodnyj-vstraivaemyj-svetilnik-serii-ofis-svo.html

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

    Здравствуйте! подскажите — как сделать редирект, правильно, для все сервисных урлов типа /?page_id=3396 на нормальную, например — /contacty

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

      Ну это должно, по хорошему, делаться на уровне CMS. Потому что вручную прописывать через .htaccess какая-то глупая затея получается. Надо чтобы это реализовывалось через PHP: берётся id из url, по id ищется страница в БД, берётся её псевдоним (например, contacty) и происходит редирект с url с id на url с псевдонимом.

      Ответить