Понимаю что тема избитая... но пересмотрел почти все темы тут про чпу и так и не нашол нужной и доступной инфы. Вопрос как сделать такую ссылку site.com/деревянные_двери есть ссылка index.php?razdel=derdveri как index.php прикрутить к .htaccess и т.д. если можно поподробней что в .htaccess писать и что в index.php Буду очень благодарен за доступное изложение, думаю потом многим пригодится.
ладно, пообщаюсь сам с сабой =) решение на половину RewriteRule ^([a-z]+)$ index.php?razdel=$1 только нада по русски.. примерно так ? RewriteRule ^([а-я]+)$ index.php?razdel=$1 и ссылка должна быть такой index.php?razdel=деревянные_двери я прав или нет ? )
В популярных фреймворках сделано так - если обращение не к файлу и директории, все перенаправляется на файл index.php который парсит запрос из $_SERVER["REQUEST_URI"] (а уж там может содержатся хоть русский, хоть китайский набор букв) и диспетчеризует на заданый код (контоллер): пример: Код (Text): <IfModule mod_rewrite.c> RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ index.php?url=$1 [QSA,L] </IfModule>
$_SERVER["REQUEST_URI"] распарсивай, написано же, а в данном конкретном случае - переменную $_GET["url"] >Mr.M.I.T. пример канонический, используется не только во фреймворках.
не хочет работать с русскими буквами Код (Text): RewriteEngine On RewriteBase / RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*+)$ index.php?razdel=$1 [QSA,L] в хтмл ссылка HTML: <a href="двери">деревянные двери</a> в пхп просто хочу перехватить кейсом PHP: $razdel=$_GET['razdel']; switch $razdel { case двери: echo "получилось"; ... } и не выходит нечего ) не хочет перенаправлять... хотя если по английски case doors: и ссылка тоже doors то все ок. Причем если я вывожу значение переменной $razdel на экран то выводит то что передаем - двери подскажите в чем я ошибаюсь ?
В .htaccess Код (Text): RewriteEngine on # Не перенаправлять запрос в index.php если существует реальный файл RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} !-f # Все остальное перенаправляем RewriteRule ^(.*)$ /index.php?query=$1 [L,QSA] В index.php надо анализировать $_GET['query'] и выдавать соответствующую страницу.
Можно еще и условие для исключения существующих директорий добавить: RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} !-d
с фига ли? он уже преренаправляет на твой срипт. во первых - почему case двери, а не case "двери" во вторых - не тупи и сделай var_dump($_GET["razdel"]) чтобы выяснить причину. скорее всего проблема в различии кодировки передаваемого параметра и кодировки сравниваемой строки в коде. приводи к одной кодировке и все будет ок.
использовал var_dump($_GET["razdel"]) результат string(14) "двери" и какой сделать вывод ?) да ставил и ковычки и без них... скорее всего кодировка... в шаблоне кодировка <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> в .htaccess AddDefaultCharset UTF-8 а в пхп что ? )
да это все замечательно, но я так понимаю мне не известно какая кодировка входит а какую нада получить на выходе... или я не совсем понял суть этой функции ?)
UTF-8 входящая кодировка, выходная, наверное, cp1251 ... я бы делал бинарное сравнение строк и посмотрел результаты. strcmp
Ты гений, все получилось ! ) переконвертил кодировки все работает... но всеравно вопрос, почему же входит утф-8 а внутри индекс.пхп работает кодировка вин-1251 ???