Переадресация, при наборе неполной ссылки.

Тема в разделе "PHP", создана пользователем vave, 17 окт 2017.

Модераторы: latteo
  1. vave

    vave

    Регистр.:
    23 июн 2007
    Сообщения:
    435
    Симпатии:
    16
    Подскажите, дорогие друзья, как можно сделать переадресацию, если пользователь переходит по ссылке www.website.ru/menu?

    Но при этом не выполнять переадресацию если ссылка полноценная www.website.ru/menu?page=home / www.website.ru/menu?page=links итд итп
     
    Последнее редактирование: 17 окт 2017
  2. UJy

    UJy

    Регистр.:
    23 авг 2011
    Сообщения:
    380
    Симпатии:
    134
    Попробуй в корневой htaccess добавить:
    Код:
    RewriteEngine On
    RewriteBase /
    
    Rewritecond %{REQUEST_URI} ^/menu$
    Rewritecond %{QUERY_STRING} ^$
    RewriteRule ^menu$ / [R=301,L]
    
    Только учитывай, что я написал правила на www.website.ru/menu , но не на www.website.ru/menu/ - если нужно, можно дописать правило. В остальном должно работать.

    Если нужна реализации на PHP (учитывая раздел, где создал тему) - скажи, напишем правило.
     
  3. lurkrz

    lurkrz Создатель

    Регистр.:
    3 май 2012
    Сообщения:
    29
    Симпатии:
    0
    preg_match('/\/menu\?$/', $url, $match);

    if($match) {
    $tourl = 'http://';
    @ob_end_clean();
    header("HTTP/1.1 301 Moved Permanently");
    header('Location: ' . $tourl);
    exit();
    }
    }
     
  4. Shur79

    Shur79 Писатель

    Регистр.:
    1 июл 2011
    Сообщения:
    5
    Симпатии:
    0
    если правильно понимаю задачу - можно и так:

    PHP:
    if (empty($_REQUEST)) {
        
    // redirect code here
    }
     
  5. mapk

    mapk Писатель

    Регистр.:
    22 май 2015
    Сообщения:
    8
    Симпатии:
    1
    Лучше ведь правило в htaccess?
     
  6. babahalki

    babahalki

    Регистр.:
    6 май 2016
    Сообщения:
    246
    Симпатии:
    98
    Может в htaccess может и проще, но не лучше, по-моему. Ибо сталкивался с тем, что даже на совместимых с htaccess серверах не апаче, например, litespeed инструкции обрабатываются немного по-своему и то, что сработало на локалхосте в apache, на хостинге уже не работает. А если у тебя nginx сервер, то вообще придется писать совсем другие инструкции по nginx.

    ИМХО, лучший вариант - делать маршрутизацию непосредственно в своем приложении. А там уже сделать как нравится, хочешь тебе на 404 переадресация будет, а хочешь, можно попробовать угадать, что именно имелось ввиду, и адресовать юзера туда. Например, можно использовать разные схемы транслита, а сайт будет понимать это, но отправлять будет на основную (т.н. каноническую) страницу.
     
    Цуиьфыеук нравится это.
  7. zaffasoft

    zaffasoft Постоялец

    Регистр.:
    2 янв 2007
    Сообщения:
    51
    Симпатии:
    7
    Я сделал таким образом. в файле в корневом директории .htaccess прописал
    Код:
    preg_match('/\/menu\?$/', $url, $match);
    
    if($match) {
    $tourl = 'http://';
    @ob_end_clean();
    header("HTTP/1.1 301 Moved Permanently");
    header('Location: ' . $tourl);
    exit();
    }
    }
    
    Должно работать. Если не получится пиши в ЛС, помогу