За последние 24 часа нас посетил 59351 программист и 1751 робот. Сейчас ищут 775 программистов ...

Как написать mod rewrite ?

Тема в разделе "PHP для новичков", создана пользователем sitev, 19 апр 2011.

  1. sitev

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

    С нами с:
    14 фев 2009
    Сообщения:
    36
    Симпатии:
    0
    Как написать mod rewrite для замены

    site.ru/index.php?page=shop

    на

    site.ru/shop
     
  2. Апельсин

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

    С нами с:
    20 мар 2010
    Сообщения:
    3.645
    Симпатии:
    2
    RewriteRule ^([a-z]+)$ index.php?page=$1 [L]
     
  3. sitev

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

    С нами с:
    14 фев 2009
    Сообщения:
    36
    Симпатии:
    0
    спасибо! работает!

    а для такого случая:

    site.ru/index.php?param1=value1&param2=value2&param3=value3 ...

    для неопределённого кол-ва параметров можно настроить mod rewrite или нужно прописать RewriteRule для одного параметра, для двух, для трёх и так далее?
     
  4. Апельсин

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

    С нами с:
    20 мар 2010
    Сообщения:
    3.645
    Симпатии:
    2
    както не вникал. делал по-простому - просто указывал альтернативный вариант. Больше 2-3х вариантов возможных похожих урлов не было, потому ничего умного тут не посоветую - на каждый по правилу.
    вроде можно сделать костыль, чтобы недостающие параметры были пустыми и всегда отправлять, скажем, 10 параметров в строке, из которых только часть будет с установленными значениями.
     
  5. sitev

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

    С нами с:
    14 фев 2009
    Сообщения:
    36
    Симпатии:
    0
    Получился вот такой универсальный mod rewrite на 9-ть параметров, думаю хватит... как получить 10-ый не знаю :)

    Код (Text):
    1.  
    2. RewriteEngine On
    3.  
    4. RewriteRule ^([a-zA-Z0-9]+)$ index.php?p1=$1 [L]
    5. RewriteRule ^([a-zA-Z0-9]+)/([a-zA-Z0-9]+)$ index.php?p1=$1&p2=$2 [L]
    6. RewriteRule ^([a-zA-Z0-9]+)/([a-zA-Z0-9]+)/([a-zA-Z0-9]+)$ index.php?p1=$1&p2=$2&p3=$3 [L]
    7. RewriteRule ^([a-zA-Z0-9]+)/([a-zA-Z0-9]+)/([a-zA-Z0-9]+)/([a-zA-Z0-9]+)$ index.php?p1=$1&p2=$2&p3=$3&p4=$4 [L]
    8. RewriteRule ^([a-zA-Z0-9]+)/([a-zA-Z0-9]+)/([a-zA-Z0-9]+)/([a-zA-Z0-9]+)/([a-zA-Z0-9]+)$ index.php?p1=$1&p2=$2&p3=$3&p4=$4&p5=$5 [L]
    9. RewriteRule ^([a-zA-Z0-9]+)/([a-zA-Z0-9]+)/([a-zA-Z0-9]+)/([a-zA-Z0-9]+)/([a-zA-Z0-9]+)/([a-zA-Z0-9]+)$ index.php?p1=$1&p2=$2&p3=$3&p4=$4&p5=$5&p6=$6 [L]
    10. RewriteRule ^([a-zA-Z0-9]+)/([a-zA-Z0-9]+)/([a-zA-Z0-9]+)/([a-zA-Z0-9]+)/([a-zA-Z0-9]+)/([a-zA-Z0-9]+)/([a-zA-Z0-9]+)$ index.php?p1=$1&p2=$2&p3=$3&p4=$4&p5=$5&p6=$6&p7=$7 [L]
    11. RewriteRule ^([a-zA-Z0-9]+)/([a-zA-Z0-9]+)/([a-zA-Z0-9]+)/([a-zA-Z0-9]+)/([a-zA-Z0-9]+)/([a-zA-Z0-9]+)/([a-zA-Z0-9]+)/([a-zA-Z0-9]+)$ index.php?p1=$1&p2=$2&p3=$3&p4=$4&p5=$5&p6=$6&p7=$7&p8=$8 [L]
    12. RewriteRule ^([a-zA-Z0-9]+)/([a-zA-Z0-9]+)/([a-zA-Z0-9]+)/([a-zA-Z0-9]+)/([a-zA-Z0-9]+)/([a-zA-Z0-9]+)/([a-zA-Z0-9]+)/([a-zA-Z0-9]+)/([a-zA-Z0-9]+)$ index.php?p1=$1&p2=$2&p3=$3&p4=$4&p5=$5&p6=$6&p7=$7&p8=$8&p9=$9 [L]
    код проверки:

    Код (Text):
    1.  
    2. <?php
    3.     echo $_GET["p1"]."<br>".$_GET["p2"]."<br>".$_GET["p3"]."<br>".$_GET["p4"]."<br>".$_GET["p5"]."<br>".$_GET["p6"]."<br>".$_GET["p7"]."<br>".$_GET["p8"]."<br>".$_GET["p9"];
    4. ?>
     
  6. YSandro

    YSandro Старожил

    С нами с:
    7 апр 2011
    Сообщения:
    2.523
    Симпатии:
    2
    Можно одной строчкой примерно так
    Код (Text):
    1. RedirectMatch pages/([0-9a-zA-Z]*)/?([0-9a-zA-Z]*)/?([0-9a-zA-Z]*)/?([0-9a-zA-Z]*)/?([0-9a-zA-Z]*)/?([0-9a-zA-Z]*)/?$ index.php?a=$1\&b=$2\&c=$3\&d=$4\&e=$5\&f=$6
     
  7. sitev

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

    С нами с:
    14 фев 2009
    Сообщения:
    36
    Симпатии:
    0
    YSandro что-то твой код у меня не пашет...
     
  8. YSandro

    YSandro Старожил

    С нами с:
    7 апр 2011
    Сообщения:
    2.523
    Симпатии:
    2
    Может, потому, что нужно в конце полный адрес указывать. Вот полностью строка, как у меня было
    Код (Text):
    1. RedirectMatch tren/ht/pages/([0-9a-zA-Z]*)/?([0-9a-zA-Z]*)/?([0-9a-zA-Z]*)/?([0-9a-zA-Z]*)/?([0-9a-zA-Z]*)/?([0-9a-zA-Z]*)/?$ http://localhost/tren/ht/?a=$1\&b=$2\&c=$3\&d=$4\&e=$5\&f=$6
     
  9. sitev

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

    С нами с:
    14 фев 2009
    Сообщения:
    36
    Симпатии:
    0
    совершенно не то что надо... твой код просто делает редирект на

    Код (Text):
    1. index.php?a=php&b=&c=&d=&e=&f=
    а мне, естественно, нужно остаться здесь

    Код (Text):
    1. site.ru/a/b/c/d/e/f
     
  10. Mr. T

    Mr. T Активный пользователь

    С нами с:
    10 ноя 2010
    Сообщения:
    733
    Симпатии:
    0
    Адрес:
    Украина, г. Киев
    А откуда столько переменных? Это фильтр что ли? Если да, то не пойму к чему это все...
     
  11. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    ужас какой. вот потому что надо было изначально писать под правило
    Код (Text):
    1. <IfModule mod_rewrite.c>
    2.   RewriteEngine on
    3.   RewriteCond %{REQUEST_FILENAME} !-f
    4.   RewriteCond %{REQUEST_FILENAME} !-d
    5.   RewriteCond %{REQUEST_URI} !=/favicon.ico
    6.   RewriteRule ^.*$ index.php [L,QSA]
    7. </IfModule>
    и парсить $_SERVER['REQUEST_URI']
     
  12. sitev

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

    С нами с:
    14 фев 2009
    Сообщения:
    36
    Симпатии:
    0
    igordata неплохая идея!

    допустим, я взял её на вооружение...
    а как теперь сделать при вызове site.ru обращение не к index.php, а, например, /catalog/myengine.php ?
     
  13. titch

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

    С нами с:
    18 дек 2010
    Сообщения:
    847
    Симпатии:
    0
    если есть такой путь, то такой mr даст туда обратиться. при необходимости, можно сделать еще сколько-либо преобразований уже после RewriteRule ^.*$ index.php [L,QSA]
     
  14. Razer

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

    С нами с:
    17 мар 2010
    Сообщения:
    8
    Симпатии:
    0
    Адрес:
    TLT
    mod_rewrite: избавляемся от двойных слэшей

    Приветствую, профессионалов!

    Возник вопрос как в url избавиться от двойных слэшей, то есть при помощи mod_rewrite осуществить 301-й редирект с www.domen.com/news//2011/ на www.domen.com/news/2011/

    Уважаемые, подскажите пожалуйста конструкцию для mod_rewrite, а то никак не могу найти.
    Заранее спасибо!
     
  15. Gromo

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

    С нами с:
    24 май 2010
    Сообщения:
    2.786
    Симпатии:
    2
    Адрес:
    Ташкент
    Razer
    по идее оба урл-а будут работать нормально, но это по идее.
    имхо, легче исправить место, где эти два несчастных слеша генерируются
     
  16. Razer

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

    С нами с:
    17 мар 2010
    Сообщения:
    8
    Симпатии:
    0
    Адрес:
    TLT
    Оба урла будут работать, спору нет, но дело в эстетике. Кроме того такая "ошибка" может возникнуть при ручном вводе (двойное нажатие), в отношении не только слэшей, но и в отношении, например, точек. А если это предусмотреть, то будет такой косяк исправляться автоматически, и это есть гуд. Отсюда и вопрос возник.

    Может быть я конечно и замарачиваюсь по мелочам, но всегда хочется, чтобы все было идеально :)
     
  17. Razer

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

    С нами с:
    17 мар 2010
    Сообщения:
    8
    Симпатии:
    0
    Адрес:
    TLT
    Re: mod_rewrite: избавляемся от двойных слэшей

    Неужели никто не подскажет? .(
     
  18. Gromo

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

    С нами с:
    24 май 2010
    Сообщения:
    2.786
    Симпатии:
    2
    Адрес:
    Ташкент
    Razer
    никому не хочется маяться ерундой :))

    как я уже и советовал
     
  19. Razer

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

    С нами с:
    17 мар 2010
    Сообщения:
    8
    Симпатии:
    0
    Адрес:
    TLT
    to Gromo

    я не спрашивал хочется вам или не хочется занивматься ерундой, я просил помочь с конструкцией для мод-реврайт, и обосновал зачем мне это нужно. Если вы не знаете как это сделать, не пишите уж лучше вообще. Количество сообщений у вас и так большое :)
     
  20. Gromo

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

    С нами с:
    24 май 2010
    Сообщения:
    2.786
    Симпатии:
    2
    Адрес:
    Ташкент
    ты спросил
    я ответил на твой вопрос


    а кол-во моих сообщений не должно волновать никого, кроме меня самого.
     
  21. Razer

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

    С нами с:
    17 мар 2010
    Сообщения:
    8
    Симпатии:
    0
    Адрес:
    TLT
    ой, не разводите хоррор, в троллинге с вами соревноваться я не собираюсь
    _________________
    Слово - серебро, молчание - золото.