За последние 24 часа нас посетили 17394 программиста и 1715 роботов. Сейчас ищут 1920 программистов ...

Как делать красивые URL без mod_rewrite

Тема в разделе "PHP для новичков", создана пользователем Ti, 13 окт 2006.

  1. Ximik

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

    С нами с:
    22 фев 2007
    Сообщения:
    108
    Симпатии:
    0
    Ну может немного не в тему, но все же.

    Есть два вида УРЛов

    http://host.ru/topic/1/2/3/4/....
    http://host.ru/?action=test&topic=1...

    Так вот второй УРЛ надо оставлять без изменений, а первый преобразовывать к виду

    http://host.ru/index.php?action=show&co ... ow&1=2&3=4

    Нет облазил, но ничего подобного не нашел :(

    ЗЫ Желательно все таки ИСПОЛЬЗОВАТЬ mod_rewrite.
     
  2. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    Ximik прям совсем ничего не нашел?
    даже по mod_rewrite ман уже стерли?
     
  3. Ximik

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

    С нами с:
    22 фев 2007
    Сообщения:
    108
    Симпатии:
    0
    Нет, конечно. Маны то я нашел и примеры нашел. Но там используются какие то непонятные мне регулярные выражения, а полазил по примерам, там ничего подобного нет :(
     
  4. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    Ximik вывод? освоить регулярки, достаточно мощная штука... сразу скажу, что сам их боюсь, но применяю методом научного тыка. А чтобы реврайт освоить почитал немного на этом форуме потом врубил в апаче чтобы он мне собирал логи действий реврайт модуля и тем же самым методом тыка довел до того что это не глючит...
    для твоей задачи будет примерно так выглядеть...
    Код (Text):
    1. /topic/([]+)/([]+)/([]+)/([]+)/... index.php?action=show&$1=$2&$3=$4
    место между скобками [] оставлено потому что я не знаю что именно ты там будешь размещать
    если только цифры то везде что-то типа [0-9]+
     
  5. 440Hz

    440Hz Старожил
    Команда форума Модератор

    С нами с:
    21 дек 2012
    Сообщения:
    8.003
    Симпатии:
    1
    Адрес:
    Оттуда
    .ntaccess
    Код (Text):
    1.  
    2.  
    3. RewriteEngine On
    4. RewriteBase /trash/rewrite2/
    5.  
    6. RewriteRule ^([a-z0-9]+)/$              index.php?action=$1         [L,QSA,NC]
    7. RewriteRule ^([a-z0-9]+)/([a-z0-9]+)/$          index.php?action=$1&param1=$2       [L,QSA,NC]
    8. RewriteRule ^([a-z0-9]+)/([a-z0-9]+)/([a-z0-9]+)/$  index.php?action=$1&param1=$2&param2=$3 [L,QSA,NC]
    9.  
    10. RewriteRule (.*)                    index.php?query=$1          [L,QSA,NC]
    index.php
    PHP:
    1.  
    2. <?
    3.  
    4. print 'index report: '.htmlentities($_SERVER['REDIRECT_QUERY_STRING']);
    5.  
    6. ?>
    7.  
    http://440hz.ru/trash/rewrite2/news/?b=b
    http://440hz.ru/trash/rewrite2/news/2007/05/?page=1
     
  6. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    440Hz а не подскажешь что значит [L,QSA,NC]? :oops: а то до мана далеко тащиться...
     
  7. 440Hz

    440Hz Старожил
    Команда форума Модератор

    С нами с:
    21 дек 2012
    Сообщения:
    8.003
    Симпатии:
    1
    Адрес:
    Оттуда
  8. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    круть! спс!
     
  9. Ximik

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

    С нами с:
    22 фев 2007
    Сообщения:
    108
    Симпатии:
    0
    Спасибо. Не совсем то, но дальше и сам разберусь. :)
     
  10. Ximik

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

    С нами с:
    22 фев 2007
    Сообщения:
    108
    Симпатии:
    0
    Код (Text):
    1.  
    2. RewriteRule ^([a-z0-9]+)/$            index.php?action=$1         [L,QSA,NC]
    3. RewriteRule ^([a-z0-9]+)/([a-z0-9]+)/$         index.php?action=$1&param1=$2      [L,QSA,NC]
    4. RewriteRule ^([a-z0-9]+)/([a-z0-9]+)/([a-z0-9]+)/$   index.php?action=$1&param1=$2&param2=$3   [L,QSA,NC]
    Ну а если у меня десять-двацать праметром может быть, мне что такую уепочку для каждого писать? Может можно как то подругому?
     
  11. 440Hz

    440Hz Старожил
    Команда форума Модератор

    С нами с:
    21 дек 2012
    Сообщения:
    8.003
    Симпатии:
    1
    Адрес:
    Оттуда
    RewriteRule (.*) index.php?query=$1 [L,QSA,NC]

    и в самом index.php разруливаешь
     
  12. 440Hz

    440Hz Старожил
    Команда форума Модератор

    С нами с:
    21 дек 2012
    Сообщения:
    8.003
    Симпатии:
    1
    Адрес:
    Оттуда
    а пример?
     
  13. DarkElf

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

    С нами с:
    22 окт 2006
    Сообщения:
    1.632
    Симпатии:
    0
    может, форму какую гетом шлет..
     
  14. Ximik

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

    С нами с:
    22 фев 2007
    Сообщения:
    108
    Симпатии:
    0
    Это я чисто гипотетически. А средствами пхп реально лучше. Пасиб.
     
  15. Ximik

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

    С нами с:
    22 фев 2007
    Сообщения:
    108
    Симпатии:
    0
    Код (Text):
    1. RewriteEngine On
    2. RewriteRule ^([a-z0-9]+)/(.*)$ index.php?cms_action=show&cms_component=$1&params=$2 [L,QSA,NC]
    3. RewriteEngine Off
    Не работает. Почему? Пишет тупо 404.

    ЗЫ Кстати а как 404 перехватить, чтобы оно подсовывало 404.html?
     
  16. pel

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

    С нами с:
    19 янв 2007
    Сообщения:
    569
    Симпатии:
    0
    Адрес:
    Симферополь
  17. Ximik

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

    С нами с:
    22 фев 2007
    Сообщения:
    108
    Симпатии:
    0
    Показ разных страниц, в зависимости от IP адреса посетителя? К чему это?

    По теме. Разобрался. Не надо было отключать :)
     
  18. pel

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

    С нами с:
    19 янв 2007
    Сообщения:
    569
    Симпатии:
    0
    Адрес:
    Симферополь
    Ximik, пригодицца :)

    Там и про твое ЗЫ есть ("Как самому обрабатывать ошибки Апача?")
     
  19. Ximik

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

    С нами с:
    22 фев 2007
    Сообщения:
    108
    Симпатии:
    0
  20. Victor

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

    С нами с:
    28 авг 2006
    Сообщения:
    57
    Симпатии:
    0
    Адрес:
    Ростов
    А если в URL’е использовать русские буквы(кириллицу).
    Например http://www.sait.ru/ДоскаОбьявлений/Автомабили/.
    Работать конечно будет но как к этому относятся поисковые роботы ?
    В Википедии используется и поисковик нормально находит такие строницы.
    http://ru.wikipedia.org/wiki/Драглайн
    http://ru.wikipedia.org/wiki/Программист
    У кого есть рабочие примеры или ссылки на такие?
     
  21. starkeen

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

    С нами с:
    15 июн 2007
    Сообщения:
    37
    Симпатии:
    0
    А вот еще проблема из той же области. У меня картинки выдает скрипт, обращение к нему по типу photo.php?id=12345&size=s
    Сейчас весь сайт перевожу к удобочитаемым урлам, а как бы в этой связи сделать, чтобы фотографии выдавал этот же скрипт, но при обращении к нему в виде photo-12345-s.jpg
    Есть мнения?
     
  22. stas_t

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

    С нами с:
    24 апр 2007
    Сообщения:
    500
    Симпатии:
    0
    Адрес:
    Courbevoie, France
    есть мнение.

    перестаньте заниматься фигнёй. удобочитаемость урлов оставьте для статических страниц, создайте нормальную структуру директорий, подумайте, где разместить статику, а где динамику, и в динамические скрипты передавайте параметры по нормальному cgi-протоколу. уверяю вас, индексирование от этого не проиграет, а вот отсутствие rewriterule только увеличит производительность сервера (всё-таки экономим на запуске нескольких регулярных выражений на каждой странице).
     
  23. Dagdamor

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

    С нами с:
    4 фев 2006
    Сообщения:
    2.095
    Симпатии:
    1
    Адрес:
    Барнаул
    stas_t
    Экономия на спичках, имхо. Любой запрос к БД съест всю эту экономию :) а ссылки без параметров, особенно короткие и читабельные, действительно красят сайт.

    starkeen
    RewriteEngine on
    RewriteRule ^photo-([0-9]+)-([a-z]+)\.[a-z]+$ /photo.php?id=$1&size=$2 [L]
     
  24. starkeen

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

    С нами с:
    15 июн 2007
    Сообщения:
    37
    Симпатии:
    0
    Дело в том, что скрипт выдачи изображений заточен под определение прав доступа к картинке, к тому же, позволяет на лету создавать картинки разных размеров, а не хранить сразу весь контент на сервере.

    Dagdamor
    Спасибо, весь затык у меня вышел с сохранением расширения jpg.
     
  25. Dagdamor

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

    С нами с:
    4 фев 2006
    Сообщения:
    2.095
    Симпатии:
    1
    Адрес:
    Барнаул
    starkeen
    Можно подставить любое - браузер определяет тип картинки по MIME-типу, а не по имени файла.
    header("Content-Type: image/gif");