Поддержка Плагины помогита разообраться с add_rewrite_rule

  • Здравствуйте. Помогите пожалуйста разобраться.
    Мне необходимо сделать rewrite для ~3000 страниц. (со старого сайта).
    но когда я пишу вот такой код:

    function add_rewrite_rules(){
        add_rewrite_rule('^1300/1308.html/$','index.php/?p=20','top');
    }
    
    add_action( 'init','add_rewrite_rules' );

    то он не срабатывает. А точнее — при вводе адреса «http://site/1300/1308.html» его перебрасывает по 301 коду на «http://ip-b.ru/1300/1308.html/» и дальше происходит переадресация на главную страницу.

Просмотр 14 ответов — с 1 по 14 (всего 14)
  • Мне необходимо сделать rewrite для ~3000 страниц. (со старого сайта).

    А по-нормальному: в хтацессе 301 (+в базе поменять при необходимости) — не?

    А по-нормальному: в хтацессе 301

    ~ 3000 страниц в .htaccess ??

    (+в базе поменять при необходимости) — не?

    да но в базе есть вот такие url-ы — «/1300/1308.html» как мне его захватить ?

    ~ 3000 страниц в .htaccess ??

    те 3к страниц в функии — это нормально? 🙂
    Если что — правила реврайта одинаковы и для хтацесса и для add_rewrite_rule

    да но в базе есть вот такие url-ы — «/1300/1308.html» как мне его захватить ?

    Регулярками. Только надо ли? Правила ЧПУ поменялись?
    Домен поменять не достаточно?

    Не надо искать проблем, там где их нет. Скажите какие правила ЧПУ (УРЛы) были, и какие стали на др. домене.
    А лучше гуглите как перенести сайт на новый домен и прописать 301

    Не надо искать проблем, там где их нет. Скажите какие правила ЧПУ (УРЛы) были, и какие стали на др. домене.
    А лучше гуглите как перенести сайт на новый домен и прописать 301

    Дык я и сам в курсе что так лучше. но Требоание клиента чтобы 301 небыло.
    Уговаривал всякими способами но ни в какую. Знаю, что скажете, надо было клиента послать и не браться за работы но уже 90% работы сделано. остался вот этот редирект.

    те 3к страниц в функии — это нормально? 🙂
    Если что — правила реврайта одинаковы и для хтацесса и для add_rewrite_rule

    Ну какбы я не собираюсь запихивать все реврайты в одну функцию. просто в старой базе все УРЛы хранились в БД вот их я оттуда буду черпать и соответственно подставляться (или не подставлять add_rewrite…)

    Требоание клиента чтобы 301 небыло.

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

    Требование вполне справедливое. Решается в хтацессе.

    Для одного УРЛа — согласен Но для 3тыс урлов ?
    Причем которые не подпаают под шаблон!! Наведу пример

    /006589
    /00751d
    /007740
    /0077b8
    /0092e5
    /0147a4
    /017bc1
    /019445
    /01ad33
    /01e00e
    /01f8ba
    /01fd24
    .......................
    /zvezdocheti_stekautsa_v_brekon
    /zolotye-peski
    /zolotoi_novi_god_v_birme
    /zolotoi_ipad_v_dubae
    /zizn_pi_vdohnovlaet_turistov
    /zimnii_izrail
    /zimnie_prazdniki_pribligautsa

    все эти УРЛы хранятся в БД.

    Для одного УРЛа — согласен Но для 3тыс урлов ?

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

    Хотя конечно, 3к редиректов — це занадто 🙂 ИМХО надо поработать с заказчиком на предмет одного редиректа — на морду, например. Или лучше на спец. страницу с поиском и релевантной (ожидаемой) выдачей.

    Кста, вариант без правки темы и хтацесса — плагин. Но хтацесс всё же лучше.

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

    Наверное я прислушаюсь к этому совету. Но всетаки для себя хочу знать почему

    function add_rewrite_rules(){
        add_rewrite_rule('^1300/1308.html/$','index.php/?p=20','top');
    }
    
    add_action( 'init','add_rewrite_rules' );

    вот такой вот код не срабатывает ? а именно если я захожу на страницу 1300/1308.html то мена 301-м редиректом перебрасывает на эту ще страницу но со слешем в конце. А дальше — на главную страницу?

    Модератор Yuri

    (@yube)

    Требоание клиента чтобы 301 небыло.

    Требование вполне справедливое. Решается в хтацессе.

    Увы, по-простому не решается. WP увидит «кривой» REQUEST_URI и постарается перенаправить куда сочтет нужным.

    Я решал аналогичную задачу повешением обработчика на хук init. В двух словах: ищем в базе соответствие, и если оно есть, делаем фейк URI так, чтобы выводилось то, что нам надо. В моем случае это были страницы со специальными «отметками» о старом адресе. Подробностей не будет — по условиям контракта.

    P.S. IMHO «без редиректа» — невежественная блажь 🙂

    А можно пример хука. т.к. я пока что вижу только выход через ф-цию php header(….) но это тот же самый редирект

    Модератор Yuri

    (@yube)

    А можно пример хука.

    Эээээ…. Короче, читать тут http://codex.wordpress.org/Plugin_API

    Эээээ…. Короче, читать тут http://codex.wordpress.org/Plugin_API

    ЭЭЭЭэ дык это то я найду. меня интересует как именно сделать реврайт если add_rewrite_ — не работает (см. пример выше). а php функция header(..) может делать только 301 редирект который в моих условиях неприемлем

    Модератор Yuri

    (@yube)

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

    Увы, по-простому не решается

    Я слепой! Я прочитал как «клиент требует 301″.
    1099511627776, сорри, был не прав. Клиент, кстати тоже 😉

    IMHO «без редиректа» — невежественная блажь 🙂

    Абсолютно согласен!

Просмотр 14 ответов — с 1 по 14 (всего 14)
  • Тема «помогита разообраться с add_rewrite_rule» закрыта для новых ответов.