Modrewrite и url из базы данных

12
V
На сайте с 11.02.2004
Offline
33
1542

В базе данных книг для каждой книги(кроме названия, описания...) есть свой url

Как при запросе url выводить информацию о книге из бд ?

Я понимаю, что нужно брать URI и сделать запрос в бд по нему, но как потом вывести по этому запросу результат в требуемое url?

В mod rewrite то все url книг не пропишешь.

Пример:

В базе есть книга "Идея вирус" с url "idea_virus"

При наборе http://www.имя_сайта/idea_virus нужно чтобы выводило из базы информацию о книге.

Как так сделать?

Killer
На сайте с 12.11.2004
Offline
130
#1

Вам обязательно нужны урлы с названием книги транслитом? это навешивает допольнительные проблемы. Если обязательно то лучше сделать как у меня, проверять еще и по автору, у нескольких авторов могут быть книги с одинаковыми названиями.

RewriteRule ^library\/([-_a-zA-Z0-9]*)\/([-_a-zA-Z0-9!\Ч]*)\.htm$			/library/book.php?aid=$1&bid=$2

Как это выглядит в жизни можно посмотреть на сайте http://smallweb.ru/

nickspring
На сайте с 29.03.2006
Offline
228
#2

Делайте реврайт несуществующих url на любой скрипт, например, index.php и там разбирайте запрашиваемый адрес как хотите и выводите чего желаете.

M
На сайте с 20.08.2004
Offline
376
#3
nickspring:
Делайте реврайт несуществующих url на любой скрипт, например, index.php и там разбирайте запрашиваемый адрес как хотите и выводите чего желаете.

Если бы я не знал как это работает я бы не понял.

например,

у вас первая книга в БД имеет УРЛ book00001

тогда , как сказал nickspring, по средствам модрерайта обращаетесь к скрипту (например index.php ) который разбирает полученные данные.

самый простой пример это селект

"SELECT * FROM `dbname` WHERE `url`=".$url

$url - это $_GET['url']

при условии что в модрерайте прописано следующее

RewriteRule ^([0-9a-z]*)$ /index.php?url=$1

аналогично сработает с ИДЕЯ ВИРУ,

отец сыночка, лапочки дочки и еще одного сыночка
B
На сайте с 06.04.2006
Offline
24
#4

.htaccess

RewriteRule ^library/([0-9A-Za-z\-\_]{2,64})\.html$ get-book.php?book-name=$1

get-book.php

$book_uri = filter_input($_GET['book-name'], 'string', 0, 64);

$book_text = mysql_result(mysql_query("SELECT `text` FROM `books` WHERE `uri`='{$book_uri}' LIMIT 1;"), 0,0);
Мониторинг сайтов (http://hostpulse.ru/), серверов, проверка содержимого страниц.
V
На сайте с 11.02.2004
Offline
33
#5

Спасибо за ответы.

Пока все запросы перенаправляю на скрипт, а он уже разбирает их.

Не пойму пока принципа написания правил modrewrite

RewriteRule ^([0-9a-z]*)$ /index.php?url=$1

^([0-9a-z]*)$ - заменяет url из цифр и букв

/index.php?url=$1 - перенаправляет на /index.php

?url=$1 - переменная чему будет равняется?

V
На сайте с 11.02.2004
Offline
33
#6

Главный вопрос:

есть url автора- формата http://www.localhost/имя_автора/

Пример:

http://www.localhost/koch_richard/

и url книги - формата http://www.localhost/имя_автора/имя_книги

Пример:

http://www.localhost/koch_richard/principle_80_20

Как написать modrewrite, чтобы он распознавал url это автора или книги?

Т.е. например, при обращении к

http://www.localhost/koch_richard/

шла переадресация на author.php

а при http://www.localhost/koch_richard/principle_80_20 на books.php

А дальше бы я тогда уже разбирал полученное url c помощью $_SERVER["REQUEST_URI"]

или есть проще метод передать url сразу в запрос БД?

Killer
На сайте с 12.11.2004
Offline
130
#7

Рабочий пример:


RewriteRule ^([-_a-zA-Z0-9]*)\/$ /author.php?aid=$1 #реврайт для автора
RewriteRule ^([-_a-zA-Z0-9]*)\/([-_a-zA-Z0-9!\Ч]*)\.htm$ /books.php?aid=$1&bid=$2 #реврайт для книги

О том как получить переменные без парсинга $_SERVER["REQUEST_URI"] поищите данные о том как работает get запрос, и для чего он нужен.

V
На сайте с 11.02.2004
Offline
33
#8

Спаcибо, еще вопрос, а что обозначает ?aid=$1 ?

DU
На сайте с 20.10.2006
Offline
105
#9
Vlaimir:

Не пойму пока принципа написания правил modrewrite

Изучаем Регулярные выражения

V
На сайте с 11.02.2004
Offline
33
#10

Нашел - http://www.pcre.ru

Читаю.

12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий