301 редирект сниппеты для .htaccess

301 редирект сниппеты для .htaccess

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

Как показала практика даже программисты плохо понимают суть работы 301 редиректа, по сему пришлось написать стандартны снипет для .htaccess

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

Данный конфиг позволяет решить следующие задачи:

  • Активация канонических директив
  • Активация рекомендованных директив "Битрикс монитор качества"
  • Установить основное зеркало сайта с www  сохраняя протокол  http или https
  • Установка основного зеркала сайта без www сохраняя http или https
  • Перенаправление HTTP > HTTPS 
  • ПеренаправлениеHTTPS > HTTP
  • Удалить любое количество "/" стоящих рядом; site.ru////catalog//item  > site.ru/catalog/item
  • Удалять "/" в конце URL если это файл
  • Добавлять "/" в конце URL если его там нет и это не файл. (работает в связке с вышестоящим, иногда требуется одно, иногда другое)
  • Удалить из URL index.php
  • И многое другое...
Инициализирующие директивы
RewriteEngine On
   #  Директива включает редиректы !!!!
RewriteBase / 
   # Без директивы "(.*) = /$1" будет /var/wwww/site/web/$1  с директивой  = /$1
Options +FollowSymLinks
   # Разрешает переход по символическим ссылкам.
  • Инициализация редиректов нужна 1 раз в файле но в самом верху
Перенаправляем протокол https на http:
RewriteCond %{HTTPS} on 
   # Проверяем наличие https в URL. 
RewriteRule ^.*$ http://%{SERVER_NAME}%{REQUEST_URI} 
   # Перенаправляем протокол на http.
  • Редирект не сработает если у вас нет доверительного "зеленого сертификата", это физически не возможно!
  • Протокол http устарел, нужно переходить на https
  • Вставить код в начале .htaccess до ЧПУ
  • Используйте или Letsencrypt или платный сертификат, не используйте само подписанные сертификаты.
  • В зависимости от конфигурации веб сервера этот редирект может не сработать, причина в определения включен ли сейчас https, данный редирект может быть написан множеством способов, просто подберите тот который будет работать конкретно у вас.
Перенаправляем протокол http на https:
RewriteCond %{HTTPS} off
   # Проверяем наличие https в URL.
RewriteCond %{REQUEST_URI} !^/bitrix/admin/1c_exchange\.php$ [NC] 
   #  Исключим обмен с 1С, ему требуется только 200 (только для Bitrix) 
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
   # Перенаправляем протокол на http.
  • Вставить код в начале .htaccess до ЧПУ
  • Используйте или Letsencrypt или платный сертификат, не используйте самоподписанные сертификаты.
  • В зависимости от конфигурации веб сервера этот редирект может не сработать, причина в определения включен ли сейчас https, данный редирект может быть написан множеством способов, просто подберите тот который будет работать конкретно у вас.
Удалить www:
RewriteCond %{HTTP_HOST} ^www\.(.*) [NC]
   # Проверяем, содержит ли домен www (в начале URL).
RewriteRule ^(.*)$ https://%1/$1 [R=301,L] 
   # Перенаправляем URL на домен без www.
  • Основное зеркало сайта должнго быть именнно то что сейчас находится в индексе поисковиков!
  • Вставить в .htaccess до ЧПУ
  • Протокол "куда" перенаправляется сайт, протокол выставлен статически и не изменяется в завиимости от ссылки по которой переходит клиент, всегда будет подставляться https
  • Протокол "куда" должен совпадать с протоколом "куда" в редиректе https, в противном случае возможны зацикливания между этими правилами.
Удалить www сохраняя протокол входящей ссылки:
RewriteCond %{ENV:HTTPS} on
    #Если включен https
RewriteRule .* - [E=SSL:s]
    #То создаем переменную  ssl с текстом s
RewriteCond %{HTTP_HOST} ^www\.(.*) [NC]
    # Проверяем, содержит ли домен www в начале URL.
RewriteRule ^(.*)$ http%{ENV:SSL}://%1/$1 [R=301,L]
    # Перенаправляем удаляем www
  • Основное зеркало сайта должнго быть именнно то что сейчас находится в индексе поисковиков!
  • Вставить в .htaccess до https, до ЧПУ
  • Может войти в конфликт с редиректом всего сайта на https, используется когда зеркала http и https не склеены
Добавить www
RewriteCond %{HTTP_HOST} !^www\.(.*) [NC] 
   # Проверяем, не содержит ли домен www (в начале URL). 
RewriteRule ^(.*)$ https://www.%{HTTP_HOST}/$1 [R=301,L] 
   # Перенаправляем URL на домен c www.Убираем повторяющиеся слеши (/) в URL
  • Основное зеркало сайта должнго быть именнно то что сейчас находится в индексе поисковиков!
  • Вставить в .htaccess после https но до ЧПУ
  • Протокол "куда" перенаправляется сайт, протокол выставлен статически и не изменяется в завиимости от ссылки по которой переходит клиент, всегда будет подставляться https
  • Протокол "куда" должен совпадать с протоколом "куда" в редиректе https, в противном случае возможны зацикливания между этими правилами.
Добавить www сохраняя протокол входящей ссылки
RewriteCond %{ENV:HTTPS} on
    #Если включен https
RewriteRule .* - [E=SSL:s]
    #То создаем переменную  ssl с текстом s
RewriteCond %{HTTP_HOST} !^www\.(.*) [NC]
    # Если нет www в начале домена
RewriteRule ^(.*)$ http%{ENV:SSL}://www.%{HTTP_HOST}/$1 [R=301,L]
    #Подставляем www и https если он включен.
  • Основное зеркало сайта должнго быть именнно то что сейчас находится в индексе поисковиков!
  • Вставить в .htaccess до https но до ЧПУ
  • Может войти в конфликт с редиректом всего сайта на https, используется когда зеркала http и https не склеены
Убираем index.php, если он есть в конце URL
RewriteCond %{REQUEST_URI} ^(.*)/index\.php$
   # URL cодержит index.php в конце.
RewriteCond %{REQUEST_METHOD} =GET
   # Выявляем GET запрос в URL (не POST).
RewriteRule ^(.*)$ %1/ [R=301,L]
   # Удалить index.php из URL.
  • Вставить в .htaccess до ЧПУ
  • На некоторых сайтах нужно удалить строку RewriteCond %{REQUEST_METHOD} =GET
Удалить повторяющиеся слеши в URL если их блольше чем 1
RewriteCond %{THE_REQUEST} //
   # Проверяем, повторяется ли слеш (//) более двух раз.
RewriteCond %{QUERY_STRING} !http(s|)://
  # Убедимся что это не урл в  GET
RewriteRule .* /$0 [R=301,L]
   # Исключаем все лишние слеши.
  • Вставить в .htaccess до ЧПУ
Убираем слеши в конце URL для статических файлов (содержит точку)
RewriteCond %{REQUEST_URI} \..+$
   # Если файл содержит точку.
RewriteCond %{REQUEST_FILENAME} !-d
   # И это не директория.
RewriteCond %{REQUEST_FILENAME} -f
   # Является файлом.
RewriteCond %{REQUEST_URI} ^(.+)/$
   # И в конце URL есть слеш.
RewriteRule ^(.+)/$ /$1 [R=301,L]
   # Исключить слеш.
  • Целесообразно объеденить с добавлением слеша, с точки зрения синтаксиса нужно и то и другое сразу, поскольку в случаях если это это файлы то слеш в конце это ошибка, если же это директория или виртуальная директория то наоборот нужно добавить слеш, по этому эти два правила используются вместе.
  • Расположено до добавления слша
Добавляем слеш(/), если его нет, и это не файл.
RewriteCond %{REQUEST_URI} !(.*)/$
   # Если слеша в конце нет.
RewriteCond %{REQUEST_FILENAME} !-f
   # Не является файлом.
RewriteCond %{REQUEST_URI} !\..+$
   # В URL нет точки (файл).
RewriteCond %{REQUEST_URI} ^(.+)$
 # В URL есть хоть один символы
RewriteRule ^(.*)$ $1/ [L,R=301]
   # Добавляем слеш в конце.
  • Целесообразно объедение правилом удаления слеша, с точки зрения синтаксиса нужно и то и другое сразу, поскольку в случаях если это это файлы то слеш в конце это ошибка, если же это директория или виртуальная директория то наоборот нужно добавить слеш, по этому эти два правила используются вместе.
  • Расположено после добавления слша
Перенаправление robots.txt на robot.php
RewriteCond %{REQUEST_FILENAME} robots.txt
   # если  файл robots.txt
RewriteCond %{DOCUMENT_ROOT}/robots.php -f
   #robots.php  существует
RewriteRule ^(.*)$ /robots.php [L]
   # То перенаправить на php файл.
Перенаправление sitemap.xml на sitemap.php
По факту то-же самое что и выше, но другой вариант записи.
RewriteRule ^sitemap\.xml$ sitemap\.php [L]
Редирект нескольких доменов , с www и без них на один сайт.
RewriteCond %{HTTP_HOST} ^(www\.|)9918474\.ru$     [NC,OR]
RewriteCond %{HTTP_HOST} ^(www\.|)site4top\.ru$    [NC,OR]
RewriteCond %{HTTP_HOST} ^(www\.|)sunnyfruits\.ru$ [NC,OR]
RewriteCond %{HTTP_HOST} ^(www\.|)u-kit\.ru$       [NC,OR]
RewriteCond %{HTTP_HOST} ^(www\.|)mediagrup\.ru$   [NC,OR]
RewriteCond %{HTTP_HOST} ^(www\.|)vmast\.ru$       [NC,OR]
RewriteCond %{HTTP_HOST} ^(www\.|)desid\.ru$       [NC]
RewriteRule ^(.*)$ https://klondike-studio.ru/  [R=301,L]
  • В последнем шаблоне OR не требуется
Перенаправляет все URL со старого домена и всех под доменов на главную страницу нового!
RewriteCond %{HTTP_HOST} ^(.*)olddomain\.ru$ [NC] 
   # Проверяем является ли оканчивается ли домен на olddomain.ru 
RewriteRule ^(.*)$ http://newdomain.ru [R=301,L] 
   # перенаправляет все урлы на главную
Перенаправляет все содержимое каталогов
http://site.ru/dir1,dir2/любое/любое
 
RewriteCond %{REQUEST_URI} ^/dir1/(.*)$ 
   # если строка начинается с /dir1/ 
RewriteRule ^(.*)$ /dir1%1 [R=301,L] 
   #Перенаправить все URL с начинающиеся с dir1 на dir2 с сохранением дальнейшей структуры URL
Перенаправляет все содержимое каталогов с любым началом и концом
http://site.ru/любое/dir1,dir2/любое/любое
RewriteCond %{REQUEST_URI} ^(.*)/dir1/(.*)$ 
   # если строка содержит /dir1/ 
RewriteRule ^(.*)$ %1/dir2/%2 [R=301,L] 
   #Перенаправить все URL с начинающиеся с dir1 на dir2 с сохранением дальнейшей структуры URL
Удалить все что после знака вопроса в URL (Удалить GET параметры)
http://site.ru/test?faq=20&id=5,test
RewriteRule ^test$ /test? [L,R=301]
  • Для удаления всех GET параметров просто поставьте в URL"куда" знак вопроса
  • GET не является частью %{REQUEST_URI} и не может быть выделен RewriteRule в
Удалить все что после знака вопроса в URL (Удалить GET параметры)
http://site.ru/test?faq=20&id=5,test
RewriteRule ^test$ /test? [L,R=301]
  • Для удаления всех GET параметров просто поставьте в URL"куда" знак вопроса
  • GET не является частью %{REQUEST_URI} и не может быть выделен RewriteRule в
Удалить GET у URL с конкретными GET параметрами
http://site.ru/?lang=en&date=21.01.21,
 RewriteCond %{QUERY_STRING} (^|&)lang\=en($|&)
# конкретный GET параметр lang=en
RewriteCond %{QUERY_STRING} (^|&)date\=.+($|&)
# GET параметр date= не пустая
RewriteRule ^(.*)$ /%1? [L,R=301]
Удалить все GET
  • Для удаления всех GET параметров просто поставьте в URL"куда" знак вопроса
  • GET не является частью %{REQUEST_URI} и не может быть выделен RewriteRule в
  • (^|&).....($|&) нужен поскольку первый GET параметр начинается с ? а далее &, не обязательно использовать если у вас жесткая последовательность параметров.
  • Редирект сработает если находится в диапазоне цифр 99-120,
    http://site.ru/65,tovar-65

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

    RewriteCond %{REQUEST_URI} ([0-9]{1,}) [NC]
    RewriteCond %1 >99
       # у URL цифра больше 99
    RewriteCond %1 <120
       # у URLцифра меньше 120
    RewriteRule ^(.*)$ tovar-%1 [R=301,L]
       # То сделать перенаправление
    

    Обратите внимание что используется % а не $

Комментарии (105)

  1. Юлия 10.04.2017 Ответить
    Подскажите, как исправить редиректом такую ссылку altstream.com.ua/%2F/ ?
    должно перенаправлять на altstream.com.ua
  2. Дмитрий
    Дмитрий 11.04.2017 Ответить
    Добрый день, Юлия!

    Для начала нужно в .htaccess подключить RewriteEngine, затем указать базу для редиректа и сам редирект

    RewriteEngine on
    RewriteBase /
    RewriteRule ^%2F/$ /? [L,R=301]
  3. Виктор
    Виктор 25.05.2017 Ответить
    RewriteCond %{HTTP_HOST} ^(.*)\.$ [NC]
    RewriteRule ^(.*)$ http://%1/$1 [R=301,L]

    Ну вообще это кстати правильноенаписание домена ибо это нулевая зона .
    Сайт всегда доступен по такому урлу, но их не индексируют поисковые роботы.
  4. Виктор 27.11.2017 Ответить
    Точка в урле это совершенно нормальное явление, так полностью пишется домен.
    Что вас в ней смущяет?
    если у вас каким-то образом проиндексировалось зеркало то просто сделайте редирект ну или

    RewriteCond %{HTTP_HOST} ^site\.ru\.$ [NC]
    RewriteRule ^(.*)$ http://site.ru$1[R=301,L]
  5. Павел 25.05.2017 Ответить
    Подскажите, как убрать из URL лишний фрагмент, который остался после плагина локализации.
    Сейчас так: http://www.site.com/ru/page.html
    Нужно так: http://www.site.com/page.html

    как правильно написать редирект в htaccess ?

    Спасибо.
  6. Виктор 01.08.2017 Ответить
    RewriteCond %{REQUEST_URI} ^(.*)/ru/(.*)$
    # если строка содержит /ru/
    RewriteRule ^(.*)$ %1/%2 [R=301,L]
    #Перенаправить все урлы с начинающиеся с dir1 на dir2 с сохранением дальнейшей структуры URL
  7. Лина 01.11.2017 Ответить
    Добрый день!
    Как отредиректить все ссылки которые заканчиваются на цифры
    site.ru/catalog/catalog2/2225/
    на site.ru/catalog/catalog2
  8. Виктор 27.11.2017 Ответить
    RewriteRule ^catalog/catalog2/([0-9]*)/$ http://site.ru/catalog/catalog2/ [L,R=301]
    На самом деле лучше использовать вот такую регулярку
    RewriteRule ^catalog/catalog2/([0-9]{1,})/$ http://site.ru/catalog/catalog2/ [L,R=301]
    В твоем случае это всего лишь
    /catalog/catalog2/3tekst
    /catalog/catalog2/5
    /catalog/catalog2/5stranista/index.html
    и так далее
    Если же нужны только цифры то перечисление [0-9] Повторить от 1 раз и и более {1,}
  9. Дмитрий
    Дмитрий 07.11.2017 Ответить
    Само собой, они должны быть в блоке RewriteModule и содержать RewriteEngine on, RewriteBase / и Options +FollowSymLinks
  10. Максим 12.11.2017 Ответить
    Здравствуйте. Файлы сайта находятся в папке http://site.ru/pages/app/ - я хочу скрыть директорию pages/ т.е. чтобы было http://site.ru/app/
    При пере направлении:
    RewriteCond %{REQUEST_URI} ^(.*)/pages/(.*)$
    RewriteRule ^(.*)$ %1/%2 [R=301,L]
    Показывается Error 404 (оно и понятно), нужно указать где лежат файлы. Но как?
  11. Виктор
    Виктор 27.11.2017 Ответить
    Вам нужно не это
    правильно ли я понимаю что весь сайт находится на http://site.ru/pages/app/
    если да то вам нужно не редирект сделать
    вам нужно изменить DocumentRoot - он настраивается не в .htaccess А в virtualhost
  12. Alexey 26.01.2018 Ответить
    Приветствую, как оптимизировать 301 редирект, чтобы не писать 3 строки под каждый язык? а одной строкой

    Redirect 301 /ru/category-name-ru/3244-tovar-name-1.html https://sitename.com/category-name/44-tovar-name-2.html
    Redirect 301 /en/category-name-en/3244-tovar-name-1.html https://sitename.com/category-name/44-tovar-name-2.html
    Redirect 301 /uk/category-name-uk/3244-tovar-name-1.html https://sitename.com/category-name/44-tovar-name-2.html

  13. Виктор
    Виктор 31.01.2018 Ответить
    смотря что вы хотите сделать.

    RewriteRule ^(ru|en|uk)/category-name-ru/3244-tovar-name-1.html$ category-name/44-tovar-name-2.html [L,R=301]
    Это если вы просто хотите именно эти три урла, в условие мы просто перечили домены

    если же у вас и в остальном есть условия например вам нужно отрезать 32 из название товара и оставить тольок 44 то будет немного по другому.
    если к этому нужно будет добавить еще и замену 1.html >2.html то правило еще изменитяс, если это будет n+1 то опять же еще рез поменяется.
  14. Кирилл 14.02.2018 Ответить

    добрый день помогите убрать папку razdel из url http://automalyar-sam.ru/razdel/drel.php
    что нужно вставить вместо dir2

    RewriteCond %{REQUEST_URI} ^(.*)/razdel/(.*)$

    RewriteRule ^(.*)$ %1/dir2/%2 [R=301,L]
  15. Виктор
    Виктор 24.02.2018 Ответить
    RewriteCond %{REQUEST_URI} ^(.*)/razdel/(.*)$
    RewriteRule ^(.*)$ %1/%2 [R=301,L]
  16. Андрей 23.02.2018 Ответить
    Добрый день
    Подскажите, как удалить часть УРЛ из адреса ( для СЕО, что бы избавиться от дубликата контента, т.к. один и тот же контент доступен по двум адресам)
    У меня есть https://solray.com.ua/infrakrasnaya-plenka/heat-plus-standart/spn_310.html нада что бы все страницы такого типа переадресовавались на один уровень выше
    https://solray.com.ua/infrakrasnaya-plenka/spn_310.html

    Спасибо.
  17. Владислав 17.04.2018 Ответить
    Здравствуйте, не могу разобраться, маюсь уже сутки. Есть адреса:
    /kvartiry/studii/28-7/
    /kvartiry/odnokomn/28-7/
    /kvartiry/dvukomn/28-7/
    /kvartiry/trehkomn/28-7/
    Нужно чтобы они редиректились на аналогичные типа:
    /kvartiry/28-7/
    /kvartiry/28-7/
    /kvartiry/28-7/
    /kvartiry/28-7/
    Писал и так.
    RewriteCond %{HTTP_HOST} ^domen/kvartiry/studii/(.*)$
    RewriteRule ^(.*)$ /kvartiry/%1 [R=302,QSA,L]

    и Так

    #RewriteCond %{HTTP_HOST} ^domen\.ru& [NC]
    #RewriteRule ^kvartiry/studii/(.*)$ /kvartiry/$1 [R=302,QSA,L]

    что я могу делать не так?
  18. Виктор
    Виктор 14.05.2018 Ответить
    RewriteCond %{REQUEST_URI} ^/kvartiry/(.+[^/])/28-7/$
    RewriteRule ^/kvartiry/(.+[^/])/28-7/$ /kvartiry/$1 [R=302,QSA,L]
  19. Владимир 19.04.2018 Ответить
    Здравствуйте. А как сделать редирект, когда подставляются цифры на конец url, а сайт доступен.
  20. Виктор
    Виктор 14.05.2018 Ответить
    Нужно больше информации
  21. Иван 18.05.2018 Ответить
    Здравствуйте. Существует проблема. На сайте возможны дубли страниц вида: http://site.ru/page1/page1/page1/ Притом отображается одна и та же страница если я зайду http://site.ru/page1 или http://site.ru/page1/page1 . На 404 страницу не переходит. Подскажите пжл, в чем может быть проблема ?
  22. Виктор
    Виктор 25.05.2018 Ответить
    Вам нужно в регулярном выражение добавить исключения повторения цикла
    Исключить можно знаком
    !
    Например
    RewriteCond %{REQUEST_URI} !^page1.php$ 
    RewriteRule (.*)$ page.php/$1 [R=302,QSA,L]
  23. Андрей 24.07.2018 Ответить
    Если страница не найдена, то редирект:

    site.ru/abcd-efg
    не найдено, 404
    редирект на 2018.site.ru/abcd-efg

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

    Спасибо за идею!
  24. Петр 08.08.2018 Ответить
    Здравствуйте!
    Подскажите, пожалуйста.
    Требуется все url сайта, заканчивающиеся .php обрезать .php и добавить слеш. Средствами 301 редиректа в
    .htaccess
    То есть
    https://klondike-studio.ru/blog/snipet-for-htaccess.php
    привести к виду
    https://klondike-studio.ru/blog/snipet-for-htaccess/
    Не могу найти решение или слеш к php добавляется или ошибка сервера, синтаксиса.
  25. Мария
    Мария 11.10.2018 Ответить
    У вас GET параметр в урле, он не является частью requestURI и не может быть перенаправлен стандартным образом.
    Для этого используются двухуровневые конструкции
    воспользуйтесь сервисом
    https://donatstudios.com/RewriteRule_Generator
  26. Сергей 24.12.2018 Ответить
    Сайт на Joomla3+Virtuemart3
    Есть .htaccess:

    <IfModule autoindex>
    IndexIgnore *
    </IfModule>
    #Options +FollowSymlinks
    Options -Indexes
    RewriteEngine On
    RewriteCond %{HTTP_HOST} ^www\.rep\.amarti\.ru$ [NC]
    RewriteRule ^(.*)$ https://rep.amarti.ru/$1 [R=301,L]
    RewriteCond %{QUERY_STRING} base64_encode[^(]*\([^)]*\) [OR]
    RewriteCond %{QUERY_STRING} (<|%3C)([^s]*s)+cript.*(>|%3E) [NC,OR]
    RewriteCond %{QUERY_STRING} GLOBALS(=|\[|\%[0-9A-Z]{0,2}) [OR]
    RewriteCond %{QUERY_STRING} _REQUEST(=|\[|\%[0-9A-Z]{0,2})
    RewriteRule .* index.php [F]
    RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
    RewriteCond %{REQUEST_URI} !^/index\.php
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule .* index.php [L]

    Если руками подписать в конце "/index.php" или "/index.html" он там и останется. Как убрать?
    И еще не работает переадресация с 404 кодом на страницу ошибки, сама страница есть в корне.
  27. Виктор
    Виктор 15.01.2019 Ответить

    RewriteCond %{REQUEST_URI} ^(.*)/index\.php$
    # URL cодержит index.php в конце.
    RewriteCond %{REQUEST_METHOD} =GET
    # Выявляем GET запрос в URL (не POST).
    RewriteRule ^(.*)$ %1/ [R=301,L]
    # Удалить index.php из URL.
  28. Виктор
    Виктор 15.01.2019 Ответить

    RewriteCond %{REQUEST_URI} ^(.*)/index\.php$
    # URL cодержит index.php в конце.
    RewriteCond %{REQUEST_METHOD} =GET
    # Выявляем GET запрос в URL (не POST).
    RewriteRule ^(.*)$ %1/ [R=301,L]
    # Удалить index.php из URL.
  29. user 07.02.2019 Ответить
    Добрый день! подскажите, пожалуйста, делаю редирект страницы со знаком вопроса в url, нашла правило для такого случая, вроде лучик света есть, но в конце url появилось /%3f
    RewriteEngine on
    RewriteBase /
    Options +FollowSymLinks
    RewriteCond %{QUERY_STRING} ^art_(id=.*)
    RewriteRule ^(article)$ /$1?%1 [R=301,L]
    RewriteCond %{QUERY_STRING} ^orderby=product_list&DescOrderBy=ASC&Itemid=74&option=com_virtuemart&page=shop.browse&category_id=33&manufacturer_id=0&keyword=&keyword1=&keyword2=&limit=30&limitstart=5
    RewriteRule (.*) http://www.arenda-service.by/?page=shop.browse&category_id=33/? [L,R=301]
  30. Виктор
    Виктор 11.02.2019 Ответить
    Для начала вам нужно сделать нормальный редирект.
    Обратите внимание что каждый квери пишется отдельно а не в общую копилку, каждый & должны быть отдельны
    так же в реврайт руле не забывайте экранировать спецсимвол вопроса /\?page=...
  31. Максим 12.02.2019 Ответить
    Добрый день!
    Подскажите, пожалуйста, если убрать / в конце url, он станет считаться другой страницей ?
  32. Виктор
    Виктор 14.02.2019 Ответить
    любое изменение в урле
  33. Денис 28.09.2019 Ответить
    Добрый день! Подскажите, пожалуйста, как сделать редирект с сайта http://site.ru/all-materials/item/17977-zagolovok-novosti17977 на http://site.ru/zagolovok-novosti17977/
    номер (как 17977) - уникальный для каждой страницы в папке item и имеет значения от 1 до 50000.
    Другими словами, мне нужно вырезать часть all-materials/item/ , вырезать число от 1 до 50000 и дефис, добавить в конце слэш. Подскажите, как сделать правильно.
  34. Виктор
    Виктор 30.09.2019 Ответить
    Как-то так
    RewriteRule ^all\-materials/item/([0-9]{1,})\-(\w+)\-(\w+)$ /zagolovok\-$2$3$1/? [L,R=301]

    ^all\-materials/item/ - начало строки и неизменный текст
    [0-9]{1,} - от нуля до девяти, повторить 1 раз и более
    \- прекратится повторение поскольку будет слеш.
    () - групаа по сути каждая скобка нумеруется 1 2 3 и так далее
    $2$3$1 - вывести группу вторую потом третью потом первую
    нужно проверить но должно работать


  35. Виктор
    Виктор 16.10.2019 Ответить
    RewriteRule ^(catalog[0-9]{1,}.)+/ad/([0-9]{1,})$ $1/$2? [L,R=301]
    Но у я написал исходя из вашей логики а в ней нет каталоги отличаются цифрами и объявления из цифр. Если у вас есть реальные ссылки то можно составить более качественное правило

  36. Алексей 17.10.2019 Ответить
    Добрый день! Спасибо за ответ.

    Если уточнить какова именно цель.
    То например,
    https://site.ru/холодильник/ad/125, https://site.ru/печь/ad/167, https://site.ru/чайник/ad/345
    Хотелось бы упростить поиск до независимо от каталогов https://site.ru/125 https://site.ru/167 https://site.ru/345 так как №объявления у каталогов не пересекаются, а просто идут по возрастающей на всем сайте.

    https://site.ru/не важно какой каталог/ad/125 - https://site.ru/125

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

  37. Виктор
    Виктор 17.10.2019 Ответить
    RewriteRule ^(.+)/ad/([0-9]{1,})$ /$1? [L,R=301]
  38. Алексей 17.10.2019 Ответить
    Еще раз спасибо за ответ!

    Все работает, но в обратную сторону.
    https://site.ru/холодильник/ad/125 - https://site.ru/холодильник, https://site.ru/печь/ad/167 - https://site.ru/печь

    Изначально я экспериментировал с такими вариантами
    RewriteRule ^catalog/(.+)$ /$1 [R=301,L]
    RewriteRule ^(.*)ad/(.+)$ /$1$2 [R=301,L]
    Url выглядел как нужно, но "ломалось" многое другое

    Насколько я понимаю "ломалось" все из за динамичности ссылок, то что ссылка редиректа непостоянная

    Спасибо за помощь!
  39. Виктор
    Виктор 18.10.2019 Ответить
    дайте пример в табличке урл был урл стал, штук 5-6
    а так же опишите что именно ломалось "другое"
  40. Алексей 18.10.2019 Ответить
    Добрый день!

    Ломалось, то что url https://site.ru/холодильник/ad/125 редиректился https://site.ru/125 в адресной строке, то есть часть url действительно визуально пряталось от пользователя, но сам url https://site.ru/125 вел не на страницу https://site.ru/холодильник/ad/125.
    Было по разному:
    https://site.ru/125 (https://site.ru/холодильник/ad/125) мог привести на главную,
    https://site.ru/573 (https://site.ru/печь/ad/573) на "сломанную" страницу, где сам продукт 573 есть, но присутствует и много лишних модулей, которых там не должно быть.

    Говоря об этом правиле RewriteRule ^(.+)/ad/([0-9]{1,})$ /$1? [L,R=301]
    Получилось так:
    https://site.ru/холодильник/ad/125 - https://site.ru/холодильник
    https://site.ru/холодильник/ad/256 - https://site.ru/холодильник
    https://site.ru/печь/ad/53 - https://site.ru/печь
    https://site.ru/печь/ad/167 - https://site.ru/печь
    https://site.ru/чайник/ad/288 - https://site.ru/чайник
    https://site.ru/чайник/ad/750 - https://site.ru/чайник

    То есть, страница конкретного продукта перенаправляется на страницу каталога

    Спасибо за помощь!
  41. Виктор
    Виктор 21.10.2019 Ответить
    не забывайте что редирект реально перекидывает урл страницы и за отдачу по этому урлу отвечает уже ЧПУ
    А что оно там у вас находит одному разработчику известно. Сдается мне что как-раз по этому урлу ничего не находится. По этому и чуда иногда не происходит.
    Разберитесь почему страница
    https://site.ru/холодильник/ad/125. не отдает нужный контент, это точно не в текущем редиректе проблемам
  42. Сергей 12.12.2019 Ответить
    Здравствуйте. Подскажите как заменить все _ на -

    Делаю так: RewriteRule ^(catalog/)(.*)_(.*)$ $1$2-$3 [R=301,L]
    Так заменяет везде. Мне нужно сделать ограничение.

    Сейчас такая ссылка
    https://site.ru/catalog/bolt_shatunnyj/c/seat_mii/

    Нужно заменить на
    https://site.ru/catalog/bolt-shatunnyj/c/seat_mii/

    Тоесть убрать все _ до /c
  43. Виктор
    Виктор 12.12.2019 Ответить
    с группами все правильно у вас
    RewriteRule ^catalog/test_222_22_2_html$ /catalog/test\-222\-22\-2\-html? [L,R=301]

    можно попробовать вот так
    RewriteRule ^(.+)_(.+)$ $1\-$2? [L,R=301]

    или как вот тут
    RewriteCond %{THE_REQUEST} _
    # Проверяем, повторяется ли слеш (//) более двух раз.
    RewriteRule .* /$0 [R=301,L]
    # Исключаем все лишние слеши.

  44. Сергей 12.12.2019 Ответить
    К сожалению наработает.
  45. Юлия 17.12.2019 Ответить
    Добрый день, подскажите пожалуйста, как корректно сделать перевод с папки архив и внутренних адресов на каталог?

    https://belvideo.ru/catalog/arkhiv/videokamera-ip-el-idm2-1-3-6-ap/ на https://belvideo.ru/catalog
    https://belvideo.ru/catalog/arkhiv/videokamera-ip-el-idm2-2-8-6-ap/ на https://belvideo.ru/catalog
    https://belvideo.ru/catalog/arkhiv/videokamera-*************/ на https://belvideo.ru/catalog

    Спасибо
  46. Виктор
    Виктор 18.12.2019 Ответить
    RewriteRule ^catalog/arkhiv/videokamera\-.+$ /catalog? [L,R=301]
  47. Сергей 22.12.2019 Ответить
    Здравствуйте, подскажите как сделать 301 редирект, чтобы:
    https://site.ru/post перенаправляло на https://site.ru/post.html
    Чтобы это правило работало только для постов (блога WP) - за исключение категорий и страниц
  48. Виктор
    Виктор 22.12.2019 Ответить
    так делать не нужно, если у вас нет явной причины зачем это делать.
    во первых у вас сайт не на html а на php и для того чтобы его запускать как php вам придется подменять текст план.

    RemoveHandler .html .htm
    AddType application/x-httpd-php .php .htm .html .phtml
    да и страница будет смотреться не так красиво.
    Зачем вам делать такой редирект?
  49. Сергей 23.12.2019 Ответить
    незнаю) всякие "seo"специалисты утверждают, что так поисковым роботам лучше понять - где именно страница, а где каталок, да и на сервер нагрузка должна меньше идти. Если расширение - то это страница, если слеш / - значит каталог и т. д.
  50. Виктор
    Виктор 23.12.2019 Ответить
    Крайне рекомендую вам отказаться от услуг таких "специалистов".
    Сокращение урла делает его более читаемым.
    В вашем случае я бы рекомендовал сделать редирект на закрытие урла, https://site.ru/post/
    Тут есть последние конфиги для этого.

  51. Сергей 29.12.2019 Ответить
    слешем - обозначается конец каталога, а у вас здесь пост, вот это не правильно. Если это страница - у неё должно быть расширение, чтобы сервер не искал, а сразу отрисовывал, вот у вас тут слеш стоит, и он думает что это каталог и пытается найти постоянно ещё ссылки, это нагружает сервер
  52. Виктор
    Виктор 30.12.2019 Ответить
    1. Нет веб серверу на это вообще разницы никакой, у него по умолчанию пытаться найти каталог, если нет то файл, это на уровне файловой системы (кстати каталог на уровне самой FS это файл, и файлов тоже нет это ссылки на набор айнодов) и тут трудностей никаких нет и быть не может, этим занимается вообще не веб сервер а файловая система.

    2. В линуксе нет расширений ! Во всех файловых системах линукс нет расширений как класса, запускаемость есть атрибут, чем интерпретировать файл пишется в первой строке файла, кстати в php тоже.
    Так что для линукс это опять же не является задачей, он просто не умеет думать категориями windows
    для линукса что файл 111 что 111.txt что .111 обычные файлы, ну ладно последний скрытый. Точка в имени файла это всего лишь символ точки на FS она никак не влияет, это просто для удобства не более.
    По этому серверу нет никакой разницы есть ли точка или нет.
    На это мнение ( выбора файл или каталог первый) реально может повлиять ваше ЧПУ но опять же оно должно работать штатно, про это сейчас разговора не шло.

    теперь для чего реально делают редиректы в урлах.
    1. удалить дубли поскольку дял поисковой системы урлы
    index.php/
    index.php
    Index.php
    это разные урлы а следовательно могут быть ошибочно проиндексированны, поскольку как правило ЧПУ движка это не исправляет
    2. Так же может быть и такая штука
    //
    /
    И его отсутствие и то и другое имеет место быть, эти зеркала тоже никто не закрывает, однако поисковику это другой урл, пусть даже клиент ткнул его случайно.

    3. урл делают более читаемым
    /index.php?ID=443&type=4&filtr=6532&category=63 просто не читаемо
    /catalog/tovar1 куда как читаемей вот и всве
    /catalog/tovar1.html - вы делаете его просто длиннее да еще в добавок это не html а код внутри реально php и вам прийдется это еще и исправлять в .htaccess


    Все подобные редиректы сделаны людьми которые пытаются думать что они шарят в SEO по факту вообще не понимая в файловой системе Ext4

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

    # Переключает url в нижний регистр, если найдены символы в верхнем регистре
    RewriteCond %{REQUEST_URI} [A-Z]
    # Убедитесь, что это не файл на диске.
    RewriteCond %{REQUEST_FILENAME} !-s
    RewriteRule (.*) rewrite-strtolower.php?rewrite-strtolower-url=$1 [QSA,L]

    Тут пожалуй поясню, дел в том что линукс регистрозависимая система и файлы image.jpeg и Image.jpeg, действительно разные и данный редирект даст вам 404 в совершенно непредсказуемых местах, даже при реальном наличие файла. Кстати правило еще и с ошибкой сделано !-s - не симлинк а не файл !-f - вот так пишется файл.
    А для того чтобы ВИЗУАЛНО отличать файл это или директория по ссылке, достаточно сделать следующее. Если это каталог то закрывать слешем Если файл то не закрывать слешем, и даже убирать его
  53. Сергей 30.12.2019 Ответить
    ну дак всё таки может подскажите как сделать 301 редирект для постов на расширение .html? )) просто у меня ссылки уже поменяны, нужно редирект быстрее ставить, а то старые урлы выдают 404, пока ПС их не посчитала не рабочими(
  54. Виктор
    Виктор 30.12.2019 Ответить
    RewriteCond %{REQUEST_FILENAME} !-s
    RewriteCond %{REQUEST_FILENAME} !-l
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_URI} !^/index.php
    RewriteCond %{REQUEST_URI} !^/.+\.html
    RewriteRule ^(.*)$ $1.html [R=301,L]
  55. Сергей 30.12.2019 Ответить
    эх... блин, так и знал( у вордпресса это болячка, сейчас и категории и страницы редиректятся на .html
    а нужно чтобы только посты
  56. Виктор
    Виктор 30.12.2019 Ответить
    дайте пару ссылок которые должны редиректиться
  57. Сергей 31.12.2019 Ответить
    Вот посты, но они все разные:
    https://binarybets.ru/tikovaya-strategiya-na-1-minutu-s-tochnostyu-90.html
    https://binarybets.ru/super-podborka-indikatorov-obyoma-dlya-mt4.html

    А вот страницы:
    https://binarybets.ru/zhivoj-grafik

    И категории:
    https://binarybets.ru/category/analiz-rynka

    Может просто в .htaccess можно исключения прописать для страницы (так как их не много) и для типов ссылок, в которых есть "category"?
  58. Виктор
    Виктор 31.12.2019 Ответить
    я по wp не спец но звучит это именно как настройка ЧПУ .
    Поскольку категория или страница знает только сам вп
    ДУ

    RewriteEngine On
    RewriteBase /
    RewriteRule ^index\.php$ - [L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . /index.php [L]
    Соответственно индекс отвечает за дальнейшее распределение.
    что-то вроде такого
    https://www.templatemonster.com/ru/faq/kak-nastroit-chpu-v-wordpress/
  59. Сергей 01.01.2020 Ответить
    а в файле .htaccess зависит от того - куда ты вставишь кусок кода? У меня вот такой сейчас:

    Options +FollowSymLinks

    <IfModule mod_deflate.c>
    AddOutputFilterByType DEFLATE text/html
    AddOutputFilterByType DEFLATE application/javascript
    AddOutputFilterByType DEFLATE text/javascript
    AddOutputFilterByType DEFLATE text/css
    </IfModule>

    <Files xmlrpc.php>
    order allow,deny
    deny from all
    </Files>

    <IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{HTTPS} off
    RewriteCond %{HTTP:X-Forwarded-Proto} !https
    RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
    RewriteCond %{REQUEST_URI} ^/$
    RewriteCond %{QUERY_STRING} ^/?author=([0-9]*)
    RewriteRule ^(.*)$ https://binarybets.ru/? [L,R=301]
    RewriteCond %{REQUEST_URI} ^/$
    RewriteCond %{QUERY_STRING} ^/?paged=1
    RewriteRule ^(.*)$ https://binarybets.ru/? [L,R=301]
    RewriteBase /
    RewriteRule ^index\.php$ - [L]
    RewriteRule ^api/([-_0-9a-z]+)/? /wp-admin/admin-ajax.php?action=$1 [QSA,L]
    RewriteRule ^api/([-_0-9a-z]+)/([0-9]+)/? /wp-admin/admin-ajax.php?action=$1&id=$2 [QSA,L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . /index.php [L]
    </IfModule>

    <IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /
    RewriteRule ^index.php$ / [QSA,R]
    RewriteRule ^index.html$ / [QSA,R]
    </IfModule>

    # END WordPress

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

    RewriteCond %{REQUEST_FILENAME} !-s
    RewriteCond %{REQUEST_FILENAME} !-l
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_URI} !^/index.php
    RewriteCond %{REQUEST_URI} !^/.+\.html
    RewriteRule ^(.*)$ $1.html [R=301,L]
  60. Виктор
    Виктор 09.01.2020 Ответить
    Попробуйте вот так
    Options +FollowSymLinks
    RewriteBase /
    
    RewriteEngine On
    RewriteCond %{HTTPS} off
    RewriteCond %{HTTP:X-Forwarded-Proto} !https
    RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
    
    RewriteCond %{REQUEST_URI} ^/$
    RewriteCond %{QUERY_STRING} ^/?author=([0-9]*)
    RewriteRule ^(.*)$ https://binarybets.ru/? [L,R=301]
    
    RewriteCond %{REQUEST_URI} ^/$
    RewriteCond %{QUERY_STRING} ^/?paged=1
    RewriteRule ^(.*)$ https://binarybets.ru/? [L,R=301]
    
    RewriteRule ^index\.php$ - [L]
    RewriteRule ^api/([-_0-9a-z]+)/? /wp-admin/admin-ajax.php?action=$1 [QSA,L]
    RewriteRule ^api/([-_0-9a-z]+)/([0-9]+)/? /wp-admin/admin-ajax.php?action=$1&id=$2 [QSA,L]
    
    RewriteCond %{REQUEST_FILENAME} !-s
    RewriteCond %{REQUEST_FILENAME} !-l
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_URI} !index\.php$
    RewriteCond %{REQUEST_URI} !.+\.html$
    RewriteRule ^(.*)$ $1.html [R=301,L]
    
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . /index.php [L]
    
    
    RewriteRule ^index.php$ / [QSA,R]
    RewriteRule ^index.html$ / [QSA,R]
    # END WordPress
    
    
    
    order allow,deny
    deny from all
    
    
    
    AddOutputFilterByType DEFLATE text/html
    AddOutputFilterByType DEFLATE application/javascript
    AddOutputFilterByType DEFLATE text/javascript
    AddOutputFilterByType DEFLATE text/css
    
    
  61. Сергей 14.01.2020 Ответить
    а подскажите, как в .htaccess запретить доступ для ПС к определённой папке и всё что в ней? а то через robots всё равно ПС заходит, даже если там запрещено
  62. Виктор
    Виктор 10.02.2020 Ответить
    самый простой способ это поместить или в эту папку
    RewriteCond %{REQUEST_URI} ^/arcicle_.+/\.html$
    https://htmlweb.ru/service/htpasswd.php
    или же указать его в главном .htaccess
    не забывайте что .htaccess может лежать в каждом каталоге свой.
    хотя вариантов решения куда больше 1
    или например через
    AllowOverride
  63. Сергей 01.02.2020 Ответить
    а подскаите пожалуйста, как предотвратить 302 редирект, когда урл вначале редиректит 302 с site.ru/post.html на site.ru/post и потом 301 на site.ru/post/
  64. Виктор
    Виктор 10.02.2020 Ответить
    ничего страшного, вес 301 теперь практически не передает, так что последовательность кодов не важна.
    Можно сделать одно правило которое будет учитывать большенство вариантов редиректов, в таком случае это будет один редирект, однако нет смысла.
  65. Andrei 06.02.2020 Ответить
    Добрый день. Спасибо за интересный материал.
    Подскажите, возможно ли сделать редирект с урлов вида:
    /article_80_60_80_80_80_80_60_80_80_80_80_60_80_80_120_80_80_100_20_80_20_60_120_80_120_20_40_40.html
    /article_80_100_20_80_80_80_80_80_80_80_40_80_80_20_60_80_60_80_120_20_60_80_40_100_100_120.html
    /article_80_60_80_80_80_80_60_80_80_80_80_80_40_60_80_80_60_20_20_100_80_60_40_40_20_40_60_80_40_60.html
    цифры, а так же их кол-во может быть разным и хотелось бы редиректить на урл /article.htm
    Возможно ли?
    Спасибо!
  66. Виктор
    Виктор 10.02.2020 Ответить
    RewriteCond %{REQUEST_URI} ^/arcicle_.+/\.html$
    RewriteRule ^(.+)$ /article.htm? [R=301,L]
  67. Виктор
    Виктор 11.02.2020 Ответить
    RewriteCond %{QUERY_STRING} (^|&)option\=com_wrapper($|&)
    RewriteCond %{QUERY_STRING} (^|&)amp;view\=wrapper($|&)
    RewriteCond %{QUERY_STRING} (^|&)amp;Itemid\=4($|&)
    RewriteRule ^index\.php$ /sport\-on\-line? [L,R=301]

    но думаю вам больше понравится вот такой вариант
    https://donatstudios.com/RewriteRule_Generator
  68. Александр 12.02.2020 Ответить
    это конечно вообще круть, спасибище большое!!!
  69. Руслан 13.02.2020 Ответить
    Дружище подскажи пожалуйста, как убрать цифры в url. Пример: site.ru/krossovki_1/muzhskie/nike/krossovki_nike_air_max_1_6, нужно сделать site.ru/krossovki/muzhskie/nike/krossovki_nike_air_max. Именно некоторые товары имеют одинаковые названия, возможно же как-то исправить?. Но вот категория Кроссовки одна, а почему-то добавляет цифру. Это cms так поставила.
  70. Виктор
    Виктор 14.02.2020 Ответить
    В вопросе недостаточно данных.
    1 повторяются ли цифры 1 или более раз?
    2. дай несколько вариантов урлов
    3. цифры всегда по _1_2 или есть варианты _123123 или даже _2_2_32
    То-же касается и урлов внутри например krossovki_1 тут только один вариант цифры ? или еще какие -то есть
    Сколько всего урлов таких ?
    вот пока такой вариант, он удалит все цифры в конце строки которые начинаются с _цифра или цифры _ цифра или цифры, конец строки
    в текущем примере удалит _1_6
    но подойдет и для удаления _12_3112
    Если тебе нужно будет удалять еще и цифры внутри то дай больше вариантов нужна статистика
    RewriteRule ^(.+)_[0-9]{1,}_[0-9]{1,}$ /$1? [L,R=301] 
  71. Руслан 14.02.2020 Ответить
    Благодарю за ответ Виктор. Вариант ниже не сработал. Конкретизирую.

    Суть в том что категория Кросовки одна, но пишет krossovki_1.
    К категории адидас присвоены еще разные категории, но пишет адидас_1

    Пример:
    krossovki_1/muzhskie/adidas/slancy_adidas_14
    krossovki_1/zhenskie/adidas_1/krossovki_adidas_samba_rose_4

    Вот еще варианты ссылок, для полного понимания:
    aksessuary/perchatki_2/nike_5/perchatki_nike
    aksessuary/perchatki_2/supreme_5/perchatki_supreme_1
    krossovki_1/zhenskie/reebok_1/krossovki_reebok_classic_leather_double_3
    aksessuary/sumki/supreme_6/sumka_supreme_18
    krossovki_1/detskie/adidas_2/krossovki_adidas_prophere_21

    Задача убрать все эти цифры на конце, типо _1, _5, _14 и т.д.
  72. Виктор
    Виктор 17.02.2020 Ответить
    RewriteRule ^(.+)_[0-9]{1,}/(.*)$ /$1/$2? [L,R=301]
    где .+ - один и более символов.
    _[0-9]{1,}/ - нижнее подчеркивание и любое количество цифр и слеш после цифры.
    $1 это первая скобка в начале , ну а бакс 2 это вторая скобка
  73. Руслан 19.02.2020 Ответить
    Благодарю. Но результата нет. Проблема в другом
  74. Алексей 15.03.2020 Ответить
    Здравствуйте, подскажите пожалуйста как в .htaccess записать что бы убрать часть урла до доменной зоны ?
    Например:
    Запрос идет на domain.com/luboe_imya_faila.php
    В адресной строке что бы стало domain.com
    т.е. обрезать все что идет после доменной зоны .com

    Заранее спасибо.
  75. Виктор
    Виктор 17.03.2020 Ответить
    А зачем так делать ? Опишите зачем именно вам это нужно, возможно вы пошли не в ту сторону.
    Что же касается отказаться от вообще всего что есть после домена, то тут я думаю вам поможет ajax притом на весь сайт, что вообще-то сомнительное решение.
    И опять же это явно самопись.
  76. Алексей 18.03.2020 Ответить
    Да вы правы Виктор. Решение было не в ту сторону.
    Возник другой вопрос.
    Скажите пожалуйста как по средствам .htaccess запретить прямой доступ на страницу ?
    Я вижу только одну возможную реализацию проверять Referrer.
    Например: Если сёрфер пришел с domain.com отображать страницу, иначе отображать 404.
    Подскажите пожалуйста как реализовать ?

    P.S. С удовольствием послушаю другие варианты, по мимо Referrer. Но как сделать мой вариант тоже пожалуйста подскажите =)
    Спасибо.
  77. Виктор
    Виктор 18.03.2020 Ответить
    Насколько я понял вы хотите ограничивать доступ если человек пришел по прямой ссылке.
    Тут действительно нужно определять рефери
    ! - отрицание

    RewriteEngine On
    RewriteCond %{HTTP_REFERER} !^http://the-ok-domain.com [NC]
    RewriteCond %{HTTP_REFERER} !^http://your-domain.com [NC]
    RewriteRule ^ http://the-website-of-your-choosing.com/ [L,R]

    опишите более детально задачу, что и зачем вы пытаетесь сделать.

  78. Сергей 24.03.2020 Ответить
    Подскажите пожалуйста как как выполнить редирект с www.сайт.ru/category_tale/view?id=1 на www.сайт.ru/category_tale/1
    Где 1 может быть любой цифрой.
    Больше спасибо.
  79. Виктор
    Виктор 25.03.2020 Ответить
    RewriteCond %{QUERY_STRING} (^|&)id\=([0-9]{1,})($|&)
    RewriteRule ^category_tale/view$ /category_tale/%1? [L,R=301]


  80. Сергей 26.03.2020 Ответить
    Виктор, благодарен Вам что уделили время моему вопросу. Применил ваши правила в своём .htaccess но вместо редиректа на www.сайт.ru/category_tale/1
    Перенаправляет просто на
    www.сайт.ru/category_tale
    Слэш в конце всех url чистится правилом
    RewriteRule ^(.*)/$ /$1 [L,R=301]
  81. Виктор
    Виктор 26.03.2020 Ответить
    да там ошибка
    RewriteCond %{QUERY_STRING} (^|&)id\=([0-9]{1,})($|&)
    RewriteRule ^category_tale/view$ /category_tale/%2? [L,R=301]
  82. Виктор
    Виктор 02.04.2020 Ответить
    1. Со слеша редирект делать не нужно, домен должен быть закрытым.
    2. гет параметр без гет ? или там что-то дальше есть?
    3 сделать легко, вначале ответ на первые два
  83. Андрей 03.05.2020 Ответить
    Добрый день! Спасибо за шаблон, сейчас масса кусочков, но целиком файл редко встретишь. Буду благодарен за помощь с перенаправлением с .html на / в конце (такая структура осталась от WP). Сайт на статике, есть страницы .html, есть подпапки со страницами внутри, всего около 60. Применил ваш .htaccess для статических сайтов. Сейчас, если открываю /category(подпапка)/page.html, то всё подгружается, а если убираю .html, то отдает 404.
    Пробовал
    1. RewriteRule ^(.*)\.html$ https://%{HTTP_HOST}/$1 [R=301,L] - убирает .html и отдает 404
    2. Переписывал условия из динамического .htaccess, добавлял для проверки RequestURI \.html - вообще internal server error
    3. Кучу вариантов из сети

    Бьюсь второй день уже)) Подскажите пожалуйста!
  84. Виктор
    Виктор 04.05.2020 Ответить
    тут вариантов несколько
    1. у вас сайт на php но в конце html
    то они делаются по одному сценарию
    2. если у вас сайт на чистом html то по другому.
    Оба способа тут.
    https://klondike-studio.ru/standards/standartnyy-htaccess/
  85. Виктор
    Виктор 11.06.2020 Ответить
    GET не является частью урла, по этому в %{REQUEST_URI} он вообще не попадает. Так что редирект смотрится вот так

    RewriteCond %{QUERY_STRING} (^|&)prgpattern\=riosm\.html($|&)
    RewriteRule ^любое/$ /riosm.html? [L,R=301]

    RewriteCond %{QUERY_STRING} (^|&)prgpattern\=riosm\.html($|&)
    RewriteRule ^любое/любое/$ /riosm.html? [L,R=301]
  86. Иван 11.06.2020 Ответить
    Я наверное плохо изложил суть проблемы.
    Но к моему удивлению нашел рабочий результат. Если кому надо - публикую код

    RewriteCond %{QUERY_STRING} ^prgpattern=([^&\s]+)$
    RewriteRule ^(.*)$ /%1? [R=301,L]
  87. Дмитрий 24.06.2020 Ответить
    Добрый день
    Можете подсказать несколько вещей.

    1.Можно ли сделать такую структуру урла через htaccess ?
    Сейчас так: https://some.site/shop/category/vhidni-dveri?filter_brand=aplot&query_type_brand=or
    Нужно так: https://some.site/shop/category/vhidni-dveri/f/brand-aplot/

    2.Убрать спецсимволы с урл, как тут например
    https://some.site/shop/vikno-whs-72-dlya-skladskykh-prymishchen-povorotno-vidkryvne-1400%d1%851300/
    Должно быть:
    https://some.site/shop/vikno-whs-72-dlya-skladskykh-prymishchen-povorotno-vidkryvne-1400x1300/
  88. Виктор
    Виктор 25.06.2020 Ответить
    И да и нет
    ДА .htaccess используется для работы с ЧПУ
    и
    НЕТ - как правило за генерацию ЧПУ отвечает PHP а htaccess только перенаправляет запросы туда.
    Вот классический пример такой работы

    RewriteCond %{REQUEST_FILENAME} !-f
    # если это не файл
    RewriteCond %{REQUEST_FILENAME} !-l
    # и если это не линка
    RewriteCond %{REQUEST_FILENAME} !-d
    # и если это не директория
    RewriteCond %{REQUEST_FILENAME} !/bitrix/urlrewrite.php$
    # защита от цикла, если это не файл на который будет сделано перенаправление
    RewriteRule ^(.*)$ /bitrix/urlrewrite.php [L]
    # то перенаправить запрос на ядро.
    И делается это потому что только движок ваш знает точно то это новость, а это картинка, это раздел а это категория и связь между гет парметром и ЧПУ тоже настраивается там.
    Так что для начала нужно определиться со следующими пунктами.
    1. Вам нужно только эти странички или вам в принципе нужно привести весь сайт в чувства.
    2. какой движок
    3. какой сайт ( это не секретная информация, вы платите яндексу за то чтоб ее распространять)
    4. Ваш .htaccess в студию
    5. Список всех урлов на замену.

    И да можно это сделать и чисто через .htaccess
  89. Диана 25.06.2020 Ответить
    Подскажите, пожалуйста, правила для htaccess, которое уберет все лишние слеши в урле

    например
    https://murkel.ru/blog/novinki-schleich-2018-iul-dekabr///
    https://murkel.ru///blog/novinki-schleich-2018-iul-dekabr/
    https:///murkel.ru/blog/novinki-schleich-2018-iul-dekabr/
    чтобы эти страницы редиректили на
    https://murkel.ru/blog/novinki-schleich-2018-iul-dekabr/

    в случае с каталогом товаров
    https://murkel.ru/catalog/ferma-schleich - главная страница
    https://murkel.ru/catalog/ferma-schleich/
    https://murkel.ru/catalog/ferma-schleich//
    https:///murkel.ru/catalog/ferma-schleich
    должны перебрасывать на основную
  90. Виктор
    Виктор 26.06.2020 Ответить
    ############################################################################
    #### Убираем повторяющиеся слеши (/) в URL ####
    ############################################################################
    RewriteCond %{THE_REQUEST} //
    # Проверяем, повторяется ли слеш (//) более двух раз.
    RewriteCond %{QUERY_STRING} !http(s|)://
    # Убедимся что это не урл в GET
    RewriteRule .* /$0 [R=301,L]
    # Исключаем все лишние слеши.
  91. Зан 28.06.2020 Ответить
    Здравствуйте.
    Все проиндексированные страницы ведут сейчас на 404 после изменения структуры. Нагуглил, что проблему можно решить через htaccess. Прошу, пожалуйста, подсказать что нужно прописать для редиректа всех ссылок с цифрами в начале на новые версии без цифр. Пример:
    site.ru/421-nazvanie-materiala =>
    site.ru/nazvanie-materiala

    Диапазон чисел 0-500, если это имеет значение.
  92. Виктор
    Виктор 29.06.2020 Ответить
    Это для данного случая ( цифра любая)
    RewriteRule ^[0-9]{1,}\-nazvanie\-materiala$ /nazvanie\-materiala? [L,R=301]
    .
    Это для всех кто начинается с цифр
    RewriteRule ^[0-9]{1,}\-(.+)$ /$1? [L,R=301] 
  93. 02.07.2020 Ответить
    Можете эту статью написать но для nginx
  94. Виктор
    Виктор 02.07.2020 Ответить
    Если дойдут руки напишу, даже этот материал оформить должным образом не успеваю.
    В nginx все немного сложнее поскольку там еще зависит и от конфигурации сервера nginx+FPM или nginx+apache конфиги будут отличаться.

Оставить комментарий