Помощник
|
чпу |
Letmetouchyou
|
Сообщение
#1
|
||
|
|
||
|
|||
Letmetouchyou
|
Сообщение
#2
|
|
RewriteRule ^([a-zA-Z0-9_-]+)$ index.php?module=$1 сделал так, вроде работает, только если заходить ht.dev/cat а если ht.dev/index.php?module=cat то ничего не происходит P.S. а если зайти ht.dev/cat/ - page not found 1)как сделать чтобы при запросе ht.dev/index.php?module=cat переходило сразу к ht.dev/cat ? использовать редирект? 2) как можно сдлать все универсально если убедт несколько ГЕТ парметров? например ht.dev/index.php?module=cat&page=8&whom=lol чтобы автоматически преобразовывало в ht.dev/cat/8/lol ? |
|
|
LifeUP |
13.5.2010, 0:55;
Ответить: LifeUP
Сообщение
#3
|
|
Тоже интересует данный вопрос.
Есть ссыль: index.php?p=start В коде пишу так: start.html через mod rewrite RewriteEngine on RewriteRule ^([a-z]+).html$ index.php?p=$1 [L] скрипт генерирует страницу по запросу ?p но если ещё добавить какойто GET параметр то страница открывается без стилей (т.е контент выводит правельно но стили нехочет грузить) :wacko: http://localhost/start/2.html Вот как можно сделать как писал Letmetouchyou (многоуровнее меню) |
|
|
Letmetouchyou
|
Сообщение
#4
|
|
help :nea:
|
|
|
unnormal |
14.5.2010, 11:48;
Ответить: unnormal
Сообщение
#5
|
|
А зачем преобразовывать строку запроса в понятные ссылки? Нет никакого смысла же.
Обычно всё наоборот. Все ссылки на сайте выглядят понятно, но парсятся апачем/скриптом в строки запросов. RewriteEngine on RewriteCond %{SCRIPT_FILENAME} !-f RewriteCond %{SCRIPT_FILENAME} !-d RewriteRule ^(.*)$ [URL="http://index.php/$1"]index.php/$1[/URL] $url = explode("/", ["REQUEST_URI"]); Проще, понятнее и не надо писать на каждый параметр своё правило
|
|
|
Letmetouchyou
|
Сообщение
#6
|
|
ето понятно, но тут прийдеться еше делать обраотчик урл строки. А если имееться куча гет запросов?
index.php?mod=friends&list=12 /friends/12/ indx.php?mod=friends&whom=12&list=11 /friends/12/11/ подскажите как сделать, если пользователь заходит на site.com/index.php?module=friend то в адресной строке он видит site.com/friends и чтобы при запросе site.com/friends site.com/friends/ его оставляло тут, и пхп скрипт мог считать GET параметры. |
|
|
unnormal |
15.5.2010, 19:26;
Ответить: unnormal
Сообщение
#7
|
|
ето понятно, но тут прийдеться еше делать обраотчик урл строки. А если имееться куча гет запросов? Как показала моя практика, rewriterule намного больше увеличивают время выполнения скрипта, нежели свой обработчик. подскажите как сделать, если пользователь заходит на site.com/index.php?module=friend то в адресной строке он видит Юзер долже ходить по правильным ссылкам сразу, а не в виде запросов. Потом, при получении такой ссылки, апач её обрабатывает и отпраляет как запрос скрипту. RewriteRule ^friends/([0-9]+)(/?)+$ index.php?modul=$1&id=$2 [L] в результате полученная апачем ссылка - site.com/friends/24/ будет обработана как site.com/index.php?modul=friends&id=24 слеэши придётся вычищать самому str_replace'ом Ты не правильно понял суть, преобразовываются не запросы, а сами ссылки |
|
|
LifeUP |
17.5.2010, 1:27;
Ответить: LifeUP
Сообщение
#8
|
|
Решил разобратся в этих дебрях... и вот что получилось:
Создаём .access такого типа: RewriteEngine on RewriteCond %{SCRIPT_FILENAME} !-f RewriteCond %{SCRIPT_FILENAME} !-d RewriteRule ^(.*)$ index.php/$1 Создаём ссылки такого типа: <a href="/">Главная</a> <a href="/photo/">Фото</a> <a href="/news/">Новости</a> и т.д в главную страницу пихаем такой обработчик: [php] $_URL = preg_replace( "/^(.*?)index\\.php\$/is", "\$1", $_SERVER['SCRIPT_NAME'] ); $_URL = preg_replace( "/^".preg_quote( $_URL, "/" )."/is", "", urldecode( $_SERVER['REQUEST_URI'] ) ); $_URL = preg_replace( "/(\\/?)(\\?.*)?\$/is", "", $_URL ); $_URL = preg_replace( "/[^0-9A-Za-z._\\-\\/]/is", "", $_URL ); $_URL = explode( "/", $_URL ); if ( preg_match( "/^index\\.(?:html|php)\$/is", $_URL[count( $_URL ) - 1] ) ) { unset( $_URL[count( $_URL ) - 1] ); } [/php] P.S код не мой, выдрал из одной CMS Как пользоваться: Допустим есть страница с новостями, раньше к ней обращались допустим по ссылке index.php?do=news а теперь будем обращаться так: /news/ Скрипт обработчик что выше разрежет GET параметр и засунет результат в массив $_URL, теперь в скрипте обработчике пишем [php] if (!empty ($_URL[0]) && $_URL[0] == 'news') { // выводим новость } [/php] Если ссылка имеет 2 параметра (/news/2/) то ко второму параметру обращаемся через $_URL[1] и т.д Дополнительно: При попытках разобраться в ЧПУ наткнулся на такую проблему что главная страница отображается нормально а при переходе на /news/2/ и подобные ccылки, слетали CSS стили, методом проб и ошибок разобрался в чём дело, вот код: [php] define ("TPL_DIR", str_replace ("\\", "/", dirname($_SERVER['SCRIPT_NAME']))); echo "<a href='" . TPL_DIR . "'>Главная</a>"; echo "<a href='" . TPL_DIR . "news/'>Новости</a>"; [/php] После него даже если будет 10 параметров в ссылке то стили останутся на месте!!! P.S Прошарив весь интернет такой подробной инструкции не видел, если сочтёте нужным то закрепите темку. |
|
|
Umid_hb |
17.5.2010, 8:09;
Ответить: Umid_hb
Сообщение
#9
|
|
в главную страницу пихаем такой обработчик:
[php] $_URL = preg_replace( "/^(.*?)index\\.php\$/is", "\$1", $_SERVER['SCRIPT_NAME'] ); $_URL = preg_replace( "/^".preg_quote( $_URL, "/" )."/is", "", urldecode( $_SERVER['REQUEST_URI'] ) ); $_URL = preg_replace( "/(\\/?)(\\?.*)?\$/is", "", $_URL ); $_URL = preg_replace( "/[^0-9A-Za-z._\\-\\/]/is", "", $_URL ); $_URL = explode( "/", $_URL ); if ( preg_match( "/^index\\.(?:html|php)\$/is", $_URL[count( $_URL ) - 1] ) ) { unset( $_URL[count( $_URL ) - 1] ); } [/php] P.S код не мой, выдрал из одной CMS [/QUOTE] Выдрал с DLE?) |
|
|
unnormal |
17.5.2010, 12:15;
Ответить: unnormal
Сообщение
#10
|
|
От себя скажу что если передавать всё так:
RewriteRule ^(.*)$ index.php?url=$1 намного удобнее, т.к. не нужно обрабатывать весь REQUEST_URI, можно смело в шаблоне добавлять get параметры. |
|
|
|
Текстовая версия | Сейчас: 19.4.2024, 0:08 |