Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум Apache

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: И снова это ЧПУ
 
 автор: NE}|{UBOJ   (17.11.2012 в 15:51)   письмо автору
 
 

Здравствуйте форумчане... помогите разобраться , а то никак не получается. Есть у меня ссылки двох видов:
site*com/index*php?subcat=beauty
site*com/index*php?subcat=healths&article=about-health

Переделать их надо в такие:
site*com/beauty/
site*com/healths/about-health/

Остановился на таких правилах, но только для 1 типа, а для двух не знаю как:
[code]RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]+)/?$ index*php?cat=$1 [L]
Помогите составить правило или нужно два правила, пробовал по-разному ничего не получается((

  Ответить  
 
 автор: mihdan   (19.11.2012 в 16:37)   письмо автору
 
   для: NE}|{UBOJ   (17.11.2012 в 15:51)
 

Ваш htaccess:


# Позволяем следовать символическим ссылкам
Options +FollowSymLinks

# Если mod_rewrite есть на сервере
<IfModule mod_rewrite.c> 

    # Включаем mod_rewrite
    RewriteEngine On 

    # Задаём "базовую" директорию,
    # относительно которой идут все запросы
    RewriteBase / 

    # Если запрашиваем реальная папка или файл
    # ничего не делаем, иначе "заворачиваем" все запросы
    # на index.php, который лежит в RewriteBase
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ /index.php [L,QSA]  

</IfModule>


А уже в index.php проводите разбор:


<?php
// Получаем запрос, удаляя пробелы и слеши 
// в начале и конце строки
$request trim($_SERVER["REQUEST_URI"], '/');
 
// Разбиваем запрос на части
$parts explode('/'$request);
 
// Удаляем случайные пустые элементы, которые
// появляются, если, например, в запросе будет
// два слеша подряд (/news//04/01/1986/)
$parts array_filter($parts'trim');
 
// Смотрим результат
print_r($parts);
?>

  Ответить  
 
 автор: NE}|{UBOJ   (20.11.2012 в 13:33)   письмо автору
 
   для: mihdan   (19.11.2012 в 16:37)
 

Ну это более менее все понятно, а как потом заставить браузер отображать ссылки вида ЧПУ.
Или эта функция:
RewriteRule ^(.*)$ /index.php [L,QSA]

будет переделывать ссылки любого вида, и такого:
site.com/index.php?subcat=beauty

и такого:
site.com/index.php?subcat=healths&article=about-health

Я попробовал, но не работают ссылки такого вида:
site.com/index.php?subcat=healths&article=about-health

Я пытаюсь сделать что-то похожее как у вас на сайте, только у меня нет /category/
Вот здесь: beauty-in-health.net можно посмотреть, то что я делаю.

  Ответить  
 
 автор: Sfinks   (21.11.2012 в 23:13)   письмо автору
 
   для: NE}|{UBOJ   (20.11.2012 в 13:33)
 

При таком правиле
RewriteRule ^(.*)$ /index.php [L,QSA]
все ссылки будут доступны в index.php в массиве $_SERVER и $_GET
Т.е. если в браузере в адресной строке ссылка:
http://site.com/gallery/catalog/100
то вместо нее будет загружен index.php, а уже в index.php ее можно получить в переменной $_SERVER['REQUEST_URI']. А дальше уже разбирайте ее средствами php и подключайте необходимые модули.

  Ответить  
 
 автор: NE}|{UBOJ   (22.11.2012 в 01:22)   письмо автору
 
   для: Sfinks   (21.11.2012 в 23:13)
 

Попробовал, не получается, ссылки вида http://site.com/gallery - работают, а ссылки вида http://site.com/gallery/catalog - не работают, стили пропадают, если не тяжело посмотрите на beauty-in-health.net тестирую, может я неверно ссылки в скрипте прописываю??? я так прописываю: gallery/catalog или просто gallery. Что не так???

  Ответить  
 
 автор: NE}|{UBOJ   (22.11.2012 в 03:27)   письмо автору
 
   для: NE}|{UBOJ   (22.11.2012 в 01:22)
 

СДЕЛАНО ))))))))))))))))))))
Завтра напишу, может кто-то будет на те сами грабли натыкаться

  Ответить  
 
 автор: Sfinks   (22.11.2012 в 08:38)   письмо автору
 
   для: NE}|{UBOJ   (22.11.2012 в 03:27)
 

Думаю грабли оказались в путях...
При использовании ЧПУ всегда нужно писать или абсолютный путь: "http://site.ru/css/style.css", или относительный от корня сайта: "/css/style.css"

  Ответить  
 
 автор: NE}|{UBOJ   (22.11.2012 в 14:05)   письмо автору
 
   для: Sfinks   (22.11.2012 в 08:38)
 

Да, грабли были именно в путях , но до этого также были грабли. Так не повторять же моих ошибок никогда если кто прочитает мой пост)) !!!!!! Не имею образования или стажа в этой сфере, поэтому могу неправильно излагать свои мысли, прошу понять. Итак:
1. Mod rewrite не переделывает ссылки (как ошибочно я считал) вида:
site.com/index.php?cat=game или site.com/index.php?cat=game&subcat=football в такие:
site.com/game или site.com/game/football
А надо ручками набирать все ссылки такого вида которого хотите видеть, т.е. в скрипте (где пишете пути к рубрикам или вашим записям) ссылки должны выглядеть так:
/game/football
ну или так /game
2. htaccess:
# Позволяем следовать символическим ссылкам 
Options +FollowSymLinks 

# Если mod_rewrite есть на сервере 
<IfModule mod_rewrite.c>  

    # Включаем mod_rewrite 
    RewriteEngine On  

    # Задаём "базовую" директорию, 
    # относительно которой идут все запросы 
    RewriteBase /  

    # Если запрашиваем реальная папка или файл 
    # ничего не делаем, иначе "заворачиваем" все запросы 
    # на index.php, который лежит в RewriteBase 
    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteRule ^(.*)$ /index.php [L,QSA]

</IfModule>

3. index.php
<?php 
// Получаем запрос, удаляя пробелы и слеши  
// в начале и конце строки 
$request trim($_SERVER["REQUEST_URI"], '/'); 
  
// на всякий случай декодируем
$request  urldecode($request );

// Разбиваем запрос на части 
$parts explode('/'$request); 
  
// Удаляем случайные пустые элементы, которые 
// появляются, если, например, в запросе будет 
// два слеша подряд (/news//04/01/1986/) 
$parts array_filter($parts'trim'); 
  
// Смотрим результат 
print_r($parts); 
?> 

Достать нужные вам параметрами так:
$foo=$parts[0];
$football=$parts[1];

ДОБАВИЛ К ВЫШЕ СТОЯЩЕМ КОДЕ mihdan СТРОЧКУ $request = urldecode($request );. Увидел когда-то не знаю нужна ли она здесь, но я добавил.
4. При использовании ЧПУ всегда нужно писать или абсолютный путь: href="http://site.ru/css/style.css", или относительный от корня сайта: href="/css/style.css" ВСЕ ССЫЛКИ ДОЛЖНЫ НАЧИНАТЬСЯ - "/"
5.Если хотите ссылки site.com/game/ или site.com/game/football/ - нужно добавить всем ссылкам в конец "/", но наверное кроме путей к стилям, скриптам..., просто не пробовал, может и будет работать, но думаю это не правильно. А также в htaccess строчку:
RewriteRule ^(.*)$ /index.php [L,QSA]
замените на:
RewriteRule ^(.*)/$ /index.php [L,QSA]


ВОТ И ВСЕ ДОЛЖНО РАБОТАТЬ)))

  Ответить  
 
 автор: mihdan   (23.11.2012 в 16:34)   письмо автору
 
   для: NE}|{UBOJ   (22.11.2012 в 14:05)
 

Посмотрите еще тег base

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования