ЧПУ в массы!

Тема в разделе "Mod Rewrite / htaccess / ЧПУ", создана пользователем Slayter, 19 авг 2006.

Статус темы:
Закрыта.
  1. Slayter

    Slayter

    Регистр.:
    8 апр 2006
    Сообщения:
    232
    Симпатии:
    52
    Ознакомимся с главным
    Всё осуществеляется через файлик .htaccess, который Вам стоит положить в корень сайта с написанным Вами содержанием, а как это содержание Вам написать сейчас объясню.
    Для начала убедитесь, что у Вашего хостера установлен mod_rewrite.
    Далее. Первой строчкой включаем Rewrite Engine:
    Код:
    RewriteEngine on 
    RewriteBase /
    Далее мы должны дать понять нашему вэб-серверу по каким правилам он должен выдавать соедржимое. Начнем с самого простого:

    Код:
    RewriteRule ^script.html$ script.php
    Теперь мы можем вызвать script.php, как script.html(символ $ означает конец строки - в нашем случае правила перезаписи, через пробел указан реальный файл). Тут всё просто и думаю комментарии излишни. Но что делать если у нас есть динамично изменяющийся параметр в адресе?

    Код:
    RewriteRule ^news/([0-9]+).html$ news.php?id=$1
    В этом примере параметр id скрипта news.php может принимать лишь числовые значения - о чем нам говорит место "([0-9]+)". Сформированный адрес будет выглядеть как news/1.html вместо news.php?id=1. Тут в принципе всё просто - но у Вас, скорее всего, возник вопрос "а что делать если динамично изменяющийся параметр принимает буквенные значения?" - просто пишем "([a-z]+)" - не стоит радоваться тут мы разрешили писать лишь буквы в нижнем регистре - а есть ещё и верхний, тогда "([A-Za-z])+". Если у Вас используются русскоязычные заголовке напишите ф-ю перевода кирилицы в транслит - ну или вырвите её откуда-нибудь, например из cutenews(www.cutenews.ru). Но это ещё не все - параметров то может быть нааамного больше одного - верно?


    Код:
    RewriteRule ^cat/([0-9]+)/page/([0-9]+).([A-Za-z]+).html$ arhive.php?cid=$1&page=$2&author=$3
    Первоначально адрес этого примера выглядел как site.ru/arhive.php?cid=1&page=1&author=Boyancheg а будет доступен просто как site.ru/cat/1/page/2.Boyancheg.html. Думаю тут что-то излишне объяснять, т.к. как записывать правила было описано выше - а это просто наглядный пример.

    В итоге у нас получился файл следующего содержания:
    Код:
    RewriteEngine on 
    RewriteBase /
    
    RewriteRule ^script.html$ script.php
    RewriteRule ^news/([0-9]+).html$ news.php?id=$1
    RewriteRule ^cat/([0-9]+)/page/([0-9]+).([A-Za-z]+).html$ arhive.php?cid=$1&page=$2&author=$3
    
    Если есть вопросы - готов на них ответить icq 3.7.1.6.0.0.
    Статья принадлежит мне - оригинал размещен на http://bestof.ru/showrazdel.php?endtextid=69206#endtext69206
     
    snapik, Rigor, LEGYS и 5 другим нравится это.
  2. a_n_d_y

    a_n_d_y

    Регистр.:
    26 мар 2006
    Сообщения:
    465
    Симпатии:
    61
    Ну я так делал у себя, но мое решение не всем подойдет.
    .htaccess
    Код:
    Options All -Indexes
    Options +FollowSymLinks
    RewriteEngine On
    
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*) index.php?url=$1
    Ну и функция
    Код:
    // Собираю массив $_GET
    if ($settings[rewrite]==1 && $_GET[url])
    {
     $arr_url=explode("/",$_GET[url]);
     $url_l=count($arr_url);
     for ($i=0;$i<count($arr_url);$i++)
     {
    $my[$i]=$arr_url[$i];
     }
     unset($_GET[url]); 
    }
    // Переписываю урл если включен ЧПУ
    function rewrite_url($url)
    { global $settings;
      if ($settings[rewrite]==1)
      {
      $arr=explode("?",$url);
      $newurl=str_replace("&","/",$arr[1]);
      $newurl=str_replace("=","/",$newurl);
      return $settings[siteurl].$newurl;
      }
    	else {
    	  		return $settings[siteurl].$url;
    		 }
    }
    Но опять же я делал под свои конкретные нужды и в строке будут видны только значения переменных, а не их имена...
     
  3. GriZone

    GriZone Управляющий

    Administrator
    Регистр.:
    17 мар 2006
    Сообщения:
    429
    Симпатии:
    2.011
    еще допиги что ты делал под код саба :)
     
  4. a_n_d_y

    a_n_d_y

    Регистр.:
    26 мар 2006
    Сообщения:
    465
    Симпатии:
    61
    А при чем тут саб?

    Добавлено через 1 минуту
    Это все собственоручно написано и к сабу никакого отношения не имеет.
    PS Я сам заметил что похоже, но только после того как к этому пришел...
     
  5. a_n_d_y

    a_n_d_y

    Регистр.:
    26 мар 2006
    Сообщения:
    465
    Симпатии:
    61
    Кстати ты меня обидел...
     
  6. GriZone

    GriZone Управляющий

    Administrator
    Регистр.:
    17 мар 2006
    Сообщения:
    429
    Симпатии:
    2.011
    какие мы обидчивые, извните мадам за резкие слова......:D

    вот код .htaccess sabdrimera

    Options All -Indexes
    Options +FollowSymLinks
    RewriteEngine On

    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*) index.php

    почти как у тебя.

    Добавлено через 22 секунды
    вот я и подумал...
     
  7. Kokos_23

    Kokos_23 Прохожие

    А вы пример этот случайно не с PHP Inside #17 взяли (стр.22) ?:-] .
     
  8. uzipof

    uzipof Создатель

    Регистр.:
    15 май 2006
    Сообщения:
    34
    Симпатии:
    11
    думаю если внимательно прочитать, становится понятно кто и откуда взял...
     
  9. Slayter

    Slayter

    Регистр.:
    8 апр 2006
    Сообщения:
    232
    Симпатии:
    52
    Kokos_23, статья авторская, моя.
    В ней не описывается ничего сверхъестественного.
    В том что новостной скрипт news.php который выводит новости по их id номеру называется у всех одинаково так же нет ничего из ряда вон выходящего!
     
  10. parempi

    parempi Спецкор

    Регистр.:
    10 окт 2006
    Сообщения:
    157
    Симпатии:
    226
    Slayter
    я добавил в корень .htaccess:

    RewriteEngine on
    RewriteBase /
    RewriteRule ^index/([0-9]+).html$ index.php?id=$1


    Но адрес остался index.php?id=1

    mod_rewrite у хостера установлен.
    В чем проблема? Я что-то накосячил?
    Если не сложно, опиши и как перевести кириллицу в латиницу. Тоже не могу разобраться. Просто знаний пока не хватает. =(
    Нужно для движка newsphp 2006
     
Статус темы:
Закрыта.