За последние 24 часа нас посетили 34313 программистов и 1742 робота. Сейчас ищет 941 программист ...

Русское ЧПУ

Тема в разделе "PHP для новичков", создана пользователем Skyers, 17 сен 2009.

  1. Skyers

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

    С нами с:
    1 май 2009
    Сообщения:
    54
    Симпатии:
    0
    Понимаю что тема избитая... но пересмотрел почти все темы тут про чпу и так и не нашол нужной и доступной инфы.
    Вопрос как сделать такую ссылку site.com/деревянные_двери
    есть ссылка index.php?razdel=derdveri

    как index.php прикрутить к .htaccess и т.д.

    если можно поподробней что в .htaccess писать и что в index.php

    Буду очень благодарен за доступное изложение, думаю потом многим пригодится.
     
  2. Skyers

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

    С нами с:
    1 май 2009
    Сообщения:
    54
    Симпатии:
    0
    ладно, пообщаюсь сам с сабой =)

    решение на половину
    RewriteRule ^([a-z]+)$ index.php?razdel=$1

    только нада по русски..
    примерно так ?

    RewriteRule ^([а-я]+)$ index.php?razdel=$1

    и ссылка должна быть такой index.php?razdel=деревянные_двери

    я прав или нет ? )
     
  3. md5

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

    С нами с:
    29 янв 2007
    Сообщения:
    250
    Симпатии:
    0
    сделай .* вместо [а-я]
     
  4. phpbidlo

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

    С нами с:
    18 авг 2009
    Сообщения:
    49
    Симпатии:
    0
    В популярных фреймворках сделано так - если обращение не к файлу и директории, все перенаправляется на файл index.php который парсит запрос из $_SERVER["REQUEST_URI"] (а уж там может содержатся хоть русский, хоть китайский набор букв) и диспетчеризует на заданый код (контоллер):
    пример:
    Код (Text):
    1.  
    2. <IfModule mod_rewrite.c>
    3.     RewriteEngine On
    4.     RewriteCond %{REQUEST_FILENAME} !-d
    5.     RewriteCond %{REQUEST_FILENAME} !-f
    6.     RewriteRule ^(.*)$ index.php?url=$1 [QSA,L]
    7. </IfModule>
     
  5. Mr.M.I.T.

    Mr.M.I.T. Старожил

    С нами с:
    28 янв 2008
    Сообщения:
    4.586
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
    бл***
     
  6. Skyers

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

    С нами с:
    1 май 2009
    Сообщения:
    54
    Симпатии:
    0
    а в пхп что писать ??? или это и все решение ???
     
  7. phpbidlo

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

    С нами с:
    18 авг 2009
    Сообщения:
    49
    Симпатии:
    0
    $_SERVER["REQUEST_URI"] распарсивай, написано же, а в данном конкретном случае - переменную $_GET["url"]



    >Mr.M.I.T.

    пример канонический, используется не только во фреймворках.
     
  8. Skyers

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

    С нами с:
    1 май 2009
    Сообщения:
    54
    Симпатии:
    0
    не хочет работать с русскими буквами
    Код (Text):
    1.  
    2. RewriteEngine On
    3. RewriteBase /
    4. RewriteCond %{REQUEST_FILENAME} !-f
    5. RewriteCond %{REQUEST_FILENAME} !-d
    6. RewriteRule ^(.*+)$ index.php?razdel=$1  [QSA,L]
    в хтмл ссылка
    HTML:
    1.  
    2. <a href="двери">деревянные двери</a>
    3.  
    в пхп просто хочу перехватить кейсом
    PHP:
    1.  
    2. $razdel=$_GET['razdel'];
    3. switch $razdel
    4. {
    5. case двери:
    6. echo "получилось";
    7. ...
    8. }
    9.  
    и не выходит нечего )
    не хочет перенаправлять...
    хотя если по английски case doors:
    и ссылка тоже doors
    то все ок.
    Причем если я вывожу значение переменной $razdel на экран то выводит то что передаем - двери

    подскажите в чем я ошибаюсь ?
     
  9. Skyers

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

    С нами с:
    1 май 2009
    Сообщения:
    54
    Симпатии:
    0
     
  10. Mr.M.I.T.

    Mr.M.I.T. Старожил

    С нами с:
    28 янв 2008
    Сообщения:
    4.586
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
    в использовании кирилицы
     
  11. AlexGousev

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

    С нами с:
    25 мар 2006
    Сообщения:
    1.505
    Симпатии:
    0
    Адрес:
    Москва
    В .htaccess
    Код (Text):
    1. RewriteEngine on
    2.  
    3. # Не перенаправлять запрос в index.php если существует реальный файл
    4. RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} !-f
    5. # Все остальное перенаправляем
    6. RewriteRule ^(.*)$ /index.php?query=$1 [L,QSA]
    В index.php надо анализировать $_GET['query'] и выдавать соответствующую страницу.
     
  12. AlexGousev

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

    С нами с:
    25 мар 2006
    Сообщения:
    1.505
    Симпатии:
    0
    Адрес:
    Москва
    Можно еще и условие для исключения существующих директорий добавить:
    RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} !-d
     
  13. Skyers

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

    С нами с:
    1 май 2009
    Сообщения:
    54
    Симпатии:
    0
    возможно, но все таки почему кирилица не обрабатывается обработчиком ?
     
  14. phpbidlo

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

    С нами с:
    18 авг 2009
    Сообщения:
    49
    Симпатии:
    0
    с фига ли? он уже преренаправляет на твой срипт.

    во первых - почему case двери, а не case "двери"
    во вторых - не тупи и сделай var_dump($_GET["razdel"]) чтобы выяснить причину.
    скорее всего проблема в различии кодировки передаваемого параметра и кодировки сравниваемой строки в коде.
    приводи к одной кодировке и все будет ок.
     
  15. Skyers

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

    С нами с:
    1 май 2009
    Сообщения:
    54
    Симпатии:
    0
    использовал var_dump($_GET["razdel"])
    результат
    string(14) "двери"
    и какой сделать вывод ?)

    да ставил и ковычки и без них...
    скорее всего кодировка...
    в шаблоне кодировка
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    в .htaccess
    AddDefaultCharset UTF-8

    а в пхп что ? )
     
  16. Apple

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

    С нами с:
    13 янв 2007
    Сообщения:
    4.984
    Симпатии:
    2
    Skyers
    (string) iconv($input_charset, $output_charset, $string)
     
  17. Skyers

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

    С нами с:
    1 май 2009
    Сообщения:
    54
    Симпатии:
    0
    да это все замечательно, но я так понимаю мне не известно какая кодировка входит а какую нада получить на выходе...
    или я не совсем понял суть этой функции ?)
     
  18. Apple

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

    С нами с:
    13 янв 2007
    Сообщения:
    4.984
    Симпатии:
    2
    UTF-8 входящая кодировка, выходная, наверное, cp1251 ... я бы делал бинарное сравнение строк и посмотрел результаты.
    strcmp
     
  19. Skyers

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

    С нами с:
    1 май 2009
    Сообщения:
    54
    Симпатии:
    0
    Ты гений, все получилось ! ) переконвертил кодировки все работает...

    но всеравно вопрос, почему же входит утф-8 а внутри индекс.пхп работает кодировка вин-1251 ???