Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Администрирование Web серверов и Web служб > Реализацпия ЧПУ


Автор: zetxi815eb 25.2.2009, 16:21
Имеется скрипт просмотра статей

http://mysite.ru/view_article.php?id=1

Мне надо чтобы в строке запроса отображалось например


http://mysite.ru/statia_o_mirivom_ekonomicheskom_krizise.html

ЧПУ для каждой статьи хранится в базе данных...но вот как его заменять???
Перерыл весь интернет...везде пишут как пользоваться mod_rewrite, 
но мне там только о настройках .htaccess

Как пределать управление этим делом скрипту...и как заменить url на мой ЧПУ из базы?

 smile  smile  smile 

Автор: rMaveric 25.2.2009, 16:34
Один из самых простых способов следующий:

Код

RewriteEngine on

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php [L,QSA]

Это твой будущий .htaccess

Данный набор правил перенаправляет все запросы на файлик index.php, если они не ведут к реально существующей директории или файлу.\

А внутри этого самого index.php ты разбераешь какой запрос был сделан и в зависимости от него возвращаешь контент. Способов это сделать мильёон, и рассказывать о них не вижу смысла.

З.Ы.
Главное не забудь обработать 404 ошибки, т.к. при таком подходе со стороны апача таковых никогда не будет.

Автор: ksnk 25.2.2009, 16:47
Код

RewriteEngine On
RewriteBase /

RewriteRule ^statia_o_mirivom_ekonomicheskom_krizise\.html$ view_article.php?id=1


Содержимое .htaccess сочиняешь по аналогии с последней строкой из базы...

Автор: zetxi815eb 25.2.2009, 16:50
Цитата(rMaveric @ 25.2.2009,  16:34)
Один из самых простых способов следующий:

Код

RewriteEngine on

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php [L,QSA]

Это твой будущий .htaccess

Данный набор правил перенаправляет все запросы на файлик index.php, если они не ведут к реально существующей директории или файлу.\

А внутри этого самого index.php ты разбераешь какой запрос был сделан и в зависимости от него возвращаешь контент. Способов это сделать мильёон, и рассказывать о них не вижу смысла.

З.Ы.
Главное не забудь обработать 404 ошибки, т.к. при таком подходе со стороны апача таковых никогда не будет.

покажите на примере хоть один способ.

Какой код должен быть в самом скрипте, чтобы это работало?

Автор: rMaveric 25.2.2009, 17:14
Код

<?php

$URI = explode( '/' , $_SERVER['REQUEST_URI'] );
print($URI[1]);
if (!$URI[1])
  {
  $id = 0;
  }
else
  {
  $id = getIdFromDB($URI[1]);
  }

showPage($id);

?>

Это в самом простом случае. Надеюсь функции getIdFromDB и showPage напишешь сам?

Автор: zetxi815eb 25.2.2009, 18:04
rMaveric, спасибо большое

Автор: bankir 3.6.2009, 19:31
rMaveric, 
спасибо тебе огромное, сам долго искал нечто подобное, вот только описывалось только как сделать это в htaccess
если не затруднит, то ответь пожалуйста:
1. надо ли на сайте переделать все внутренние ссылки под формат чпу (сейчас site.ru/catalog.php?id=1&brand=15 на site.ru/catalog/1/15) а то получается что sitemap генерируется старого формата, а поисковики будут заходить уже на новый с чпу.
2. если надо, то как бы переделать Ваш код чтобы он склеивал старые ссылки с новыми?
Код

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ catalog.php [L,QSA]

3. и последнее, 

Цитата(rMaveric @  25.2.2009,  16:34 Найти цитируемый пост)
Главное не забудь обработать 404 ошибки, т.к. при таком подходе со стороны апача таковых никогда не будет. 

не подскажете, а как можно переделать Ваш код если у меня такая структура?
russcom-shop.ru - сайтец на котором будет внедряться чпу
menu (catalog.php?id=) -> submenu (subcatalog.php?id=) -> item (item.php?id=)

Заранее благодарен

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)