X   Сообщение сайта
(Сообщение закроется через 3 секунды)



 

Здравствуйте, гость (

| Вход | Регистрация )

2 страниц V   1 2 >
Открыть тему
Тема закрыта
> чпу
Letmetouchyou
Letmetouchyou
Topic Starter сообщение 12.5.2010, 21:19; Ответить: Letmetouchyou
Сообщение #1


вроде тема уже миллион раз заезженная но не пойму в чем дело.
в общем нужно пробразовать
ht.dev/index.php?module=cat
в
ht.dev/cat

пробовал как написано былов одной статье
Создание ЧПУ (человеко-понятных урлов) с помощью mod_rewrite

C его помощью можно преобразовать, например, www.site.ru/product.php?id=123 в www.site.ru/product/123 следующим образом:

RewriteEngine on
RewriteRule ^product/([^/\.]+)/?$ product.php?id=$1 [L]

В другом примере преобразуем www.site.ru/script.php?product=123 в www.site.ru/cat/product/123/:

RewriteRule cat/(.*)/(.*)/$ /script.php?$1=$2

то есть
RewriteEngine On
RewriteRule ^/([^/\.]+)/?$ index.php?module=$1 [L]

не работает

если использовать онлайн генератор

получаеться
RewriteEngine On
RewriteRule ^([^/]*)$ /?module=$1 [L]


В этом случае - error#500 Internal server error

как правильно сделать преобразование?
0
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Letmetouchyou
Letmetouchyou
Topic Starter сообщение 12.5.2010, 22:32; Ответить: 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
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
Letmetouchyou
Topic Starter сообщение 14.5.2010, 0:03; Ответить: Letmetouchyou
Сообщение #4


help :nea:
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
unnormal
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
Letmetouchyou
Topic Starter сообщение 14.5.2010, 22:24; Ответить: 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
unnormal
сообщение 15.5.2010, 19:26; Ответить: unnormal
Сообщение #7


(Letmetouchyou @ 15.5.2010, 01:24) *
ето понятно, но тут прийдеться еше делать обраотчик урл строки. А если имееться куча гет запросов?

Как показала моя практика, rewriterule намного больше увеличивают время выполнения скрипта, нежели свой обработчик.
(Letmetouchyou @ 15.5.2010, 01:24) *
подскажите как сделать, если пользователь заходит на 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
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
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
unnormal
сообщение 17.5.2010, 12:15; Ответить: unnormal
Сообщение #10


От себя скажу что если передавать всё так:
RewriteRule ^(.*)$ index.php?url=$1

намного удобнее, т.к. не нужно обрабатывать весь REQUEST_URI, можно смело в шаблоне добавлять get параметры.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
2 страниц V   1 2 >
Открыть тему
Тема закрыта
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0


 



RSS Текстовая версия Сейчас: 16.4.2024, 8:48
Дизайн