ЧПУ не выходит сделать.

Тема в разделе "PHP", создана пользователем асс, 12 апр 2009.

Статус темы:
Закрыта.
Модераторы: latteo
  1. асс

    асс

    Регистр.:
    13 окт 2006
    Сообщения:
    749
    Симпатии:
    220
    Здравствуйте форумчане. Столкнулся с тем что надо сдлеать чпу.

    И так имеем на сейчас принцип работы такой
    ссылка на новость вида
    index.php?id=22


    а мне надо чтоб было так

    index.php?cpu=universal
    или index.php?cpu=universal.html

    пробую набрать урл с полем cpu
    тоетсь так index.php?cpu=universal

    но реакции нет.

    я так понимаю что нужно if($_GET['id']=='') {
    заменить на if($_GET['icpu']=='') {

    но я пробовал что то не вышло.

    Как сделать правильно чтоб выбрать нужную новость
    не по ID а по CPU

    Добавлено через 8 минут
    Разобрался. Оказываеться что там
    строка проверки стоит if(!is_numeric($id))
     
  2. RolCom

    RolCom

    Регистр.:
    12 мар 2008
    Сообщения:
    351
    Симпатии:
    108
    Не на icup, а на cup естесно. И код после if выполняется если id/cup пустой. Выбор новости где-то в другом месте.
     
  3. асс

    асс

    Регистр.:
    13 окт 2006
    Сообщения:
    749
    Симпатии:
    220
    да cup, я там ошибся просто.

    А как реализовать чтоб работало и id и cpu


    например если cpu пустая тоесть там нет Чпу слова
    то ставим ид.
    Щас помудрю, позже отпишу результат
     
  4. bunny

    bunny Постоялец

    Регистр.:
    17 мар 2007
    Сообщения:
    66
    Симпатии:
    4
    Мб я не правльно понимаю понятие "ЧПУ"
    ЧПУ-человека понятнятный урл
    тоесть вида
    _http://sitename.com/stanica.html вместо
    _http://sitename.com/index.php?id=45
    или я не так понимаю или вопрос так задан
     
  5. jID

    jID Постоялец

    Регистр.:
    12 фев 2008
    Сообщения:
    106
    Симпатии:
    31
    stanica.htm - тоже малопонятный УРЛ.

    Вот пример ЧПУ:
    http://ru.wikipedia.org/wiki/Заглавная_Страница

    (нет транслитерации и непонятного .html)

    Реализцется такая идея через .htaccess и поддержку парсинга строки ядром.

    Вот, как например, делаю я:

    .htaccess
    Код:
    # включаем mod_rewrite
    Options +FollowSymLinks
    RewriteEngine on
    
    # если адрес набран без www, насильно редиректим
    RewriteCond %{HTTP_HOST} ^site.ru
    RewriteRule ^(.*)$ http://www.site.ru/$1 [R=permanent,L]
    
    # устанавливаем корень
    RewriteBase /
    
    # главный индексный файл
    DirectoryIndex core.php
    
    # это и есть перенаправление обработки адресной строки в ядро
    RewriteCond %{REQUEST_FILENAME} !-s
    RewriteRule ^(.+)$ /core.php?$1 [L]
    А теперь часть кода core.php, ответственная за парсинг адресной строки:
    PHP:
    // ...
    // На входе должен быть адрес вида:
    // http://host/dir/subdir/../subdirX/?param1=1&param2=2&...&paramX=x
    // $url_array[]
    // $url_array[0] = "dir";
    // $url_array[1] = "subdir";
    // ..
    // $url_array[X] = "subdirX";
    // $_GET["param1"] = "1";
    // $_GET["param2"] = "2";
    // ..
    // $_GET["paramX"] = "X";
    $url "http://localhost".$_SERVER['REQUEST_URI'];
    $temp_url parse_url($url);
    $dirs explode('/'$temp_url['path']);
    isset(
    $temp_url['query']) && parse_str($temp_url['query'], $_GET);
    // основная страница
    $page=$dirs[count($dirs)-2];
    // если страница не указана (т.е. индексная), то указываем из конфиги
    if ($page=="")
      
    $page=$config['core_default_module'];

    // пример обработчика страницы /user/
    if ($dirs[1]=="user") {
      
    $page="user";
      
    $name=$dirs[2];
    }

    // далее переменная $page уже содержит название модуля, который нужно подгружать, и в дело вступает обработчик и подгрузчик модулей, но это уже совсем другая история....
    Как видно из приведённого примера, сохраняются переменные в $_GET, а также URL парсится из вполне человеко-подобного вида.
     
  6. асс

    асс

    Регистр.:
    13 окт 2006
    Сообщения:
    749
    Симпатии:
    220
    Привел урлы к виду
    smart/demo/index.php?cpu=mobilnaya_otdacha&cat=0

    вот теперь нужно убрать то что выдлено жирным
    чтоб вышло так
    smart/demo/mobilnaya_otdacha.html

    Как это реализовать через htacces

    там же еще есть категория cat=0

    Добавлено через 2 минуты

    Тоесть у вас по мимо htacces еще и в php обрабатываеться?

    К стати я видел реализацию Чпу в Даннео Там 2 массива входной и выходной
     
  7. jID

    jID Постоялец

    Регистр.:
    12 фев 2008
    Сообщения:
    106
    Симпатии:
    31
    Код:
    RewriteRule ^mobilnaya_otdacha.html$ index.php?cpu=mobilnaya_otdacha&cat=0 [L,QSA]
     
  8. асс

    асс

    Регистр.:
    13 окт 2006
    Сообщения:
    749
    Симпатии:
    220
    А как быть если там динамические данные?

    Должно быть типа так

    HTML:
    RewriteRule ^[a-zA-z0-9_].html$ index.php?cpu=$1&cat=0 [L,QSA] 
     
  9. bunny

    bunny Постоялец

    Регистр.:
    17 мар 2007
    Сообщения:
    66
    Симпатии:
    4
    Немного не точно (так как могут быть другие еще символы)еси нужны категории
    Код:
    RewriteRule ^(.*)/(.*).html+$ index.php?cpu=$2&cat=$1 [L]
    Если не нужны те категории
    Код:
    RewriteRule ^(.*).html+$ index.php?cpu=$2&cat=0 [L]
     
  10. -=Xardas=-

    -=Xardas=-

    Регистр.:
    17 сен 2008
    Сообщения:
    250
    Симпатии:
    58
Статус темы:
Закрыта.