За последние 24 часа нас посетили 7998 программистов и 515 роботов. Сейчас ищут 237 программистов ...

Упростить htaccess

Тема в разделе "PHP для новичков", создана пользователем rs_ssh, 17 май 2018.

  1. rs_ssh

    rs_ssh Активный пользователь

    С нами с:
    18 янв 2014
    Сообщения:
    220
    Симпатии:
    0
    Скажем, нужно сделать правило для всех стран,
    как можно упростить данные строки в htaccess?

    RewriteRule ^russia$ /index.php?country=1 [NC,L]
    RewriteRule ^ukraine$ /index.php?country=2 [NC,L]
    RewriteRule ^belarus$ /index.php?country=3 [NC,L]
     
  2. Deonis

    Deonis Старожил

    С нами с:
    15 фев 2013
    Сообщения:
    1.433
    Симпатии:
    475
    Использовать давно проверенный способ - единая точка входа. Т.е. все запросы адресуются на индексный файл, там вы разбираете URI и, в зависимости от него, выполняете тот или иной сценарий.
     
    AlexandrS нравится это.
  3. rs_ssh

    rs_ssh Активный пользователь

    С нами с:
    18 янв 2014
    Сообщения:
    220
    Симпатии:
    0
    Есть такая единая точка входа, но не на index.php. А здесь именно надо настроить страны на странице index.php.
    --- Добавлено ---
    Я думаю, что в htaccess country=1,2,3 даже не важны, нужно правило чтобы при таком раскладе (http://localhost/belarus) грузился index.php, а не другая страница с единой точка входа.
    Что то типа такого правила:
    RewriteRule ^(.*)$ index.php [NC,L] - оно не работает, но суть примерно ясна :)
    Так как страну можно потом вытащить из БД по части урла /belarus.
     
  4. miketomlin

    miketomlin Активный пользователь

    С нами с:
    9 авг 2016
    Сообщения:
    841
    Симпатии:
    118
    Если есть осн. точка входа, а это какой-то хак, то с учетом написанного достаточно при помощи маски сузить фильтр до нужных значений, например:
    Код (Text):
    1. RewriteRule ^(russia|ukraine|belarus)$ index.php [NC,L]
    Однако согласен с Deonis'ом, не надо на это понапрасну растрачивать ресурсы и загромождать .htaccess деталями, которых в нем быть не должно. Повесьте в осн. скрипте соотв. обработчик на указанные адреса или на крайняк отлавливайте обращения по указанным адресам в обработчике 404-ой осн. скрипта и при попадании подключайте ваш index.php.
     
  5. miketomlin

    miketomlin Активный пользователь

    С нами с:
    9 авг 2016
    Сообщения:
    841
    Симпатии:
    118
    Если стран дофига, а интегрировать доп. скрипт в основной не позволяет религия, нужно усложнить адреса, добавив в них какой-то общий отличительный признак, например префикс /country/, и использовать общий шаблон с этим признаком в маске для вызова хака, либо фильтровать в хаке все подряд (не самый эффективный вариант). И только при промахе в нем вызывать из него напрямую осн. скрипт, например: WP-перенаправление со сменой post_id на postname (там имя index.php все же имеет осн. фронт, но не суть).
     
  6. MouseZver

    MouseZver Старожил

    С нами с:
    1 апр 2013
    Сообщения:
    4.763
    Симпатии:
    767
    Адрес:
    Лень
    дам 80% что придется все скрипты переписывать под единую точку, либо придется костыли вшивать.
     
  7. rs_ssh

    rs_ssh Активный пользователь

    С нами с:
    18 янв 2014
    Сообщения:
    220
    Симпатии:
    0
    Спасибо, так более короче.
    Я подумал, что названия стран тоже можно убрать, всё равно из урла они так и так берутся.
    Делал так:
    RewriteRule ^(.*)$ index.php [NC,L] - но так конечно уже не работает :)
     
  8. miketomlin

    miketomlin Активный пользователь

    С нами с:
    9 авг 2016
    Сообщения:
    841
    Симпатии:
    118
    Я же вам написал, что когда вы перехватываете «посторонние» запросы, нужно отдавать управление прямо из хака в осн. точку входа. А с такой маской (скобки тут лишние, да и $ не особо нужен) вы перехватываете все подряд, поэтому, естественно, при обнаружении промахов внутри хака нужно вызывать осн. скрипт.