Задать вопрос
Ответы пользователя по тегу htaccess
  • Как настроить редирект для этих ссылок на соответствующие без www?

    shambler81
    @shambler81 Куратор тега htaccess
    RewriteCond %{HTTP_HOST} ^www\.w\-dprint\.ru$
    RewriteRule ^wp\-content/uploads/2020/11/Presentation\-GG\.pdf$ https://w\-dprint.ru/wp\-content/uploads/2020/11/Presentation\-GG.pdf? [L,R=301]
    
    RewriteCond %{HTTP_HOST} ^www\.w\-dprint\.ru$
    RewriteCond %{QUERY_STRING} (?:^|&)C\=N;O\=D(?:$|&)
    RewriteRule ^feed/$ https://w\-dprint.ru/feed/?C=N;O=D [L,R=301]
    
    RewriteCond %{HTTP_HOST} ^www\.w\-dprint\.ru$
    RewriteCond %{QUERY_STRING} (?:^|&)C\=M;O\=A(?:$|&)
    RewriteRule ^feed/$ https://w\-dprint.ru/feed/?C=M;O=A [L,R=301]
    
    RewriteCond %{HTTP_HOST} ^www\.w\-dprint\.ru$
    RewriteRule ^feed/$ https://w\-dprint.ru/feed/? [L,R=301]
    
    RewriteCond %{HTTP_HOST} ^www\.w\-dprint\.ru$
    RewriteCond %{QUERY_STRING} (?:^|&)C\=M;O\=D(?:$|&)
    RewriteRule ^feed/$ https://w\-dprint.ru/feed/?C=M;O=D [L,R=301]
    Ответ написан
    Комментировать
  • Не работает простой редирект с одной страницы на другую?

    shambler81
    @shambler81 Куратор тега htaccess
    а так ?
    RewriteCond %{HTTP_HOST} ^w\-dprint\.ru$
    RewriteRule ^plotternaya\-rezka$ https://www.w\-dprint.ru/? [L,R=301]
    Ответ написан
  • Как убрать доп. символы из УРЛ с помощью редиректа, или еще каких возможных способов?

    shambler81
    @shambler81 Куратор тега 1С-Битрикс
    Все уже придумано до вас, разложил и разжевал по полочкам тут
    https://klondike-studio.ru/standards/standartnyy-h...
    Ответ написан
    Комментировать
  • Почему не работает 301 редирект в .htaccess?

    shambler81
    @shambler81 Куратор тега htaccess
    Экранировать за вас я буду ?
    RewriteRule ^9010\-2/veb\-kamery$ /9010\-2/veb\-kamery/9010\-2/veb\-kamery? [L,R=301]

    Так чисто по тз

    А во так если вы хотите как-то изменить часть урлов на сайте 1 правилом
    RewriteCond %{REQUEST_URI} ^/dir1/(.*)$ 
    RewriteRule ^(.*)$ /dir2/%1 [R=301,L]

    Где %1 это то что в RewriteCond в скобках.
    опишите более подробно чтобы вы хотели один редирект или некое условие на группу урлов.
    Ответ написан
    5 комментариев
  • Правильно ли я преобразую в чпу?

    shambler81
    @shambler81 Куратор тега htaccess
    эээ бро
    ты не создал ЧПУ
    ты создал редирект на место в котором будут обрабатываться запросы

    Вот пример чпу
    RewriteEngine On
    #Включается 1 раз  на файл активирует редиректы
    RewriteCond %{REQUEST_FILENAME} !-f
    # если это не файл
    RewriteCond %{REQUEST_FILENAME} !-l
    # и если это не  линка
    RewriteCond %{REQUEST_FILENAME} !-d
    # и если это не директория, то есть не физически существующие файлы и папки, то есть по факту 404тые как у тебя сейчас
    RewriteCond %{REQUEST_FILENAME} !/bitrix/urlrewrite.php$
    # и не сам файл отвечающий за создание ЧПУ
    RewriteRule ^(.*)$ /bitrix/urlrewrite.php [L]
    #  если все это удовлетворено то сделать редирект на файл который отвечает за создание ЧПУ

    Собственно после этого открывает ваш файл который получает URL которого нет физически но у него есть соответствие этого GET параметра нужным действиям например отобразить каталог в таком ракурсе.
    Ваш пхп файл генерирует нужную страничку и отдает ее с кодом 200.

    Все что вы сделали, это собрали все эти запросы и направили его на эту ссылку
    и что вы ожидаете ? обрабатывать то кто его у вас там будет ?
    Читать тут
    Ответ написан
    Комментировать
  • Как исключить категории с редиректа на новый домен?

    shambler81
    @shambler81 Куратор тега htaccess
    А если без слеша спереди ?
    Да и не заюывай что у тебя в браузере кеш редиректов, его тоже нужно скинуть а желательно проверь в другом браузере или через сервисы.
    RewriteEngine On
    RewriteCond %{HTTP_USER_AGENT} "android|blackberry|googlebot-mobile|iemobile|ipad|iphone|ipod|opera mobile|palmos|webos" [NC]
    RewriteCond %{HTTP_HOST} site.net
    RewriteCond %{REQUEST_URI} !^lechenie-diarei/page/.*$
    RewriteRule (.*) https://site-net.turbopages.org/site.net/s/$1 [R=302,L]
    Ответ написан
  • Как сделать редирект в .htaccess с языка на главную без изменения остальной структуры сайта?

    shambler81
    @shambler81 Куратор тега htaccess
    очень долго пытался понять что вы пытались сказать
    В общем все сделать можно
    частный случай должен распологаться выше общего, так же не забывайте о возможности отрицания знаком !

    RewriteRule ^ru/katalog\.html$ /? [L,R=301]
    это правило редиректит ру каталог на слеш

    RewriteRule ^ru/$ /? [L,R=301]
    Ответ написан
    Комментировать
  • Как удалить GET параметр из url при помощи файла .htaccess?

    shambler81
    @shambler81 Куратор тега htaccess
    это если тебе нужен любой из гет параметров
    RewriteCond %{QUERY_STRING} (?:^|&)id\=(.*)(?:$|&)
    RewriteRule ^employeedb3/id$ https://employeedb3/%1? [L,R=301]

    ну и частный случай
    RewriteCond %{QUERY_STRING} (?:^|&)id\=(id_000001)(?:$|&)
    RewriteRule ^employeedb3/id$ https://employeedb3/%1? [L,R=301]


    %1 это не опечатка, это первая группа из RewriteCond
    Ответ написан
  • Как сделать редирект с множественных слешей на главную?

    shambler81
    @shambler81 Куратор тега htaccess
    RewriteCond %{THE_REQUEST} //
       # Проверяем, повторяется ли слеш (//) более двух раз.
    RewriteCond %{QUERY_STRING} !http(s|)://
      # Убедимся что это не урл в  GET
    RewriteRule .* /$0 [R=301,L]
       # Исключаем все лишние слеши.
    Ответ написан
    Комментировать
  • Как в htaccess сделать редирект по регулярному выражению?

    shambler81
    @shambler81 Куратор тега htaccess
    По идее это должно было быть вот так
    RewriteCond %{QUERY_STRING} (?:^|&)route\=product/product(?:$|&)
    RewriteCond %{QUERY_STRING} (?:^|&)path\=([0-9]+)(?:$|&)
    RewriteCond %{QUERY_STRING} (?:^|&)product_id\=([0-9]+)/specification(?:$|&)
    RewriteRule ^index\.php$ /index.php?route=product/product&path=%1&product_id=%2 [L,R=301]


    Где %1 и %2 это аналог $1 и $2 из RewriteRule
    но проблема в том что у тебя два запроса и тут придется делать это как-то по другому поскольку сработает толкьо $1 и будет он 894 поскольку группы из предидущего конда будут стерты.

    так что думаю это можно сделать или через %{THE_REQUEST}
    где можно выделить сразу оба параметра
    Ну или просто в 404.php поставить регулярку.
    Так будет даже наверное лучше, только чтоб 404 отдало после регулярки а не до .

    тут я более детально описывал как это сделать.
    но товарищ говорит что у него не заработало, хотя у меня на тесте все работало, почитай там в коментах я давал более правильный ответ.
    https://qna.habr.com/q/1041262#answer_2012466
    если не получится, то пиши придётся создавать тестовой стенд ;)
    Ответ написан
  • Динамическая переменная в .htaccess?

    shambler81
    @shambler81 Куратор тега htaccess
    Вше решение само по себе странное, бэк или должен иметь статический айпи или DNS пусть даже техническое.
    Третий вриант это явно костыли.
    Да на bash это будет одна строчка но это костыль притом какой-то конский.
    Может вы решите проблему с бэк серверами.
    Если это что-то серьезное там есть привязка днс
    если нет то с чего бы они меняли айпи ?
    если это домашняя заготовка, камон 100 рублей в месяц заплати за айпи.
    поверь костыль этого не стоит.
    Опиши более детально приину почему бэки меняются есть ли у тебя до них доступ, есть ли АПИ и как ты собирая отслеживать их динамические айпи пусть даже в теории.
    Ответ написан
    5 комментариев
  • Как в Битриксе настроить редирект ссылок без слеша в конце на с ним?

    shambler81
    @shambler81 Куратор тега 1С-Битрикс
    Владислав Старцев,
    уже много раз вижу такую шляпу
    кто вообще придумал этот редирект ?
    RewriteCond %{REQUEST_URI} !\?
    ? - не может физически быть в %{REQUEST_URI} поскольку не является частью урла
    собственно как и RewriteCond %{REQUEST_URI} !\&
    & - выделяется через RewriteCond %{QUERY_STRING}
    По факту все что тут работает
    RewriteCond %{REQUEST_URI} !\=
    Если не =, но простите а причем тут равно ? Скорее всего тот "мастер" что придумал сей редирект думал о GET параметрах, но они как я и говорил выше не попадают в REQUEST_URI
    Если не точка, а простите причем тут точка ?
    И того 2 условия в принципе не выполнимы
    2 из них идиотские и не удовлетворяют тз

    Все что остается это предпоследнее не слеш в конце
    И сам реврайт рул.
    То есть из всего правила работает 10% остальные 90% это мусор идиота

    Теперь разберемся
    Как бы это должно было быть на самом деле
    Тут все сложнее поскольку есть пара условий в которых нельзя убирать слеш.
    RewriteCond %{REQUEST_URI} \..+$
       # Если файл содержит точку.
    RewriteCond %{REQUEST_FILENAME} !-d
       # И это не директория.
    RewriteCond %{REQUEST_FILENAME} -f
       # Является файлом.
    RewriteCond %{REQUEST_URI} ^(.+)/$
       # И в конце URL есть слеш.
    RewriteRule ^(.+)/$ /$1 [R=301,L]
       # Исключить слеш.


    Оданко не все так просто, сематнически правильно именно закрывать слешем
    НА СЕО не влияет ни то ни то, это 100% инфа, влияет отсутствие редиректов с одного на другое что может дать два урла.
    НО какой именно урл со слешем или нет, не влияет!

    НО семантически URL должне быть закрыт
    однако слеш после имени файла дает 404, если это просто файл.
    Так что нам нужно разделить реальные файлы и урлы созданые ЧПУ

    добавив вот такое правило.
    ############################################################################
    #### Добавляем слеш(/), если его нет, и это не файл.                    ####
    ############################################################################
    RewriteCond %{REQUEST_URI} !(.*)/$
       # Если слеша в конце нет.
    RewriteCond %{REQUEST_FILENAME} !-f
       # Не является файлом.
    RewriteCond %{REQUEST_URI} !\..+$
       # В URL нет точки (файл).
    RewriteCond %{REQUEST_URI} ^(.+)$
     # В URL есть хоть один символы
    RewriteRule ^(.*)$ $1/ [L,R=301]
       # Добавляем слеш в конце.


    И того сразу два правила, притом именно в такой последовательности должны быть в .htccess
    за врея работы я видил много горе СЕО специалистов рекоменующие вот такие шляпы, да и редиректы 90% которого не может сработать физически.
    так же часто видил удаление аперкейсов в урлах ( чего разумеется тоже делать нельзя)
    редиректы на хтмл мативируя тем что гугл думает что это статика и лучше их валидирует и тд и тп.
    Все это лечится одним, удалением этого сотрудника и наемом более квалифицированного сеошника, а не плавающего товарищя в анабиозе.
    Ответ написан
    6 комментариев
  • Как настроить редирект для страниц товаров без .html на страницы с .html?

    shambler81
    @shambler81 Куратор тега htaccess
    Назовите мне причину зачем это нужно делать?
    Вот я бы хотел аргументацию хоть убей.
    Обычно делают с точностью до наоборот
    Ответ написан
  • Как сделать исключение для одной директории в HTACCESS?

    shambler81
    @shambler81 Куратор тега htaccess
    RewriteCond %{HTTP_HOST} oldsite\.ru
    RewriteCond %{REQUEST_URI} !^/directory(/|)
    RewriteRule (.*) https://newsite.ru [R=301,L]

    знак ! - отрицание
    (/|) - со слешем или без, но это не обязательно
    \.ru - экранируйте в %{HTTP_HOST} точки
    Ответ написан
    Комментировать
  • Как настроить редирект с url со знаком вопроса?

    shambler81
    @shambler81 Куратор тега 1С-Битрикс
    Ответ написан
    Комментировать
  • Как сделать 301 редирект с Url с get параметрами на url без параметров, но содержащего значения из них?

    shambler81
    @shambler81 Куратор тега htaccess
    GET параметр не является частью урла и не попадает в RewriteRule так что работать с ним можно только через %{QUERY_STRING}
    RewriteCond - это если, они складываются до RewriteRule
    RewriteCond %{QUERY_STRING} (?:^|&)id\=000001(?:$|&)
    RewriteCond %{QUERY_STRING} (?:^|&)userid\=22222222222(?:$|&)
    RewriteRule ^Orders/Order$ /Orders/Order_id_000001_userid_22222222222? [L,R=301]


    Cоответственно для всех вариантов

    RewriteCond %{QUERY_STRING} (?:^|&)id\=(.+)(?:$|&)
    RewriteCond %{QUERY_STRING} (?:^|&)userid\=(.+)(?:$|&)
    RewriteRule ^Orders/Order$ /Orders/Order_id_%1_userid_%2? [L,R=301]


    где%1это группа из RewriteCond %2 соответственно
    (?: - этот знак анилирует этут группу дабы она не мешала
    Ответ написан
  • Как сделать 301 редирект с извлечением имени папки, в которой находится файл?

    shambler81
    @shambler81 Куратор тега htaccess
    RewriteCond %{HTTP_HOST} ^site1\.ru$
    RewriteRule ^(.+)$ https://site2.ru/a\?link=$1[L,R=301]

    Если доменя не являются зеркалами, то
    RewriteCond %{HTTP_HOST} ^site1\.ru
    можно удалить
    Обрати внимание что наоборот с гет параметра на обычный урл нужно делать редирект по другому.
    Так же не забывай
    названием папки в домене

    ЭТО URL а не название папки в домене
    а то что после вопроса с точки зрения mod_rewrite не является урлом, это уже GET
    И того
    ДОМЕН-УРЛ-ГЕТ
    так сказать немного мат части
    Ответ написан
    Комментировать
  • Как разрешить в адресе страницы любые цифры?

    shambler81
    @shambler81 Куратор тега htaccess
    RewriteRule ^[0-9]{1,}$ https://site.ru/? [L,R=301]


    [0-9] - цтифры
    {1,} - сколько раз, от 1 и до бесконечности
    Так же обратите внимание что если цифры будут в GET то это не сработает
    Ответ написан
    5 комментариев
  • Почему не работает реврайт?

    shambler81
    @shambler81 Куратор тега htaccess
    RewriteRule ^catalog/$ /catalog/all? [L,R=301]
    Ответ написан
    Комментировать
  • После переноса от хостера сайта OpenCart открывается только главная страница, остальные 404?

    shambler81
    @shambler81 Куратор тега htaccess
    судя по конфигу

    location ~ \.php$ {
            try_files $uri = 404;
            include fastcgi_params;
            fastcgi_pass  unix:/var/run/php/php7.0-fpm.sock;
            fastcgi_index index.php;
            fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        }


    У тебя конфигурация nginx+FPM
    а в нем не работает htaccess
    Ответ написан
    3 комментария