PDA

Показать полную графическую версию : [решено] ЧПУ


Artem-Samsung
10-02-2009, 13:00
Темки такой не нашел, решил создать (кроме прикрепленной).
Но мне похоже mod_rewrite не подходит

Есть такие ссылки:

index.php?production=mixer&id=12
index.php?production=mixer&id=3
index.php?production=mixer&id=20

index.php?production=vinil&id=30
index.php?production=vinil&id=14


Нужно переделать в что то типа www.сайт.com/mixer/Behringer-DDM-4000.htm

К примеру
index.php?production=mixer&id=12

Это продукция, котороя имеет свое название в поле `title` - `Behringer DDM 4000`
В таблице `de_mixer`


Для первого шага, я нашел в Инете подсказку - несуществующие ссылки через .htaccess перенаправлять на какой то скрипт. Я написал так:

ErrorDocument 404 /index.php?djone=ufu
ErrorDocument 401 /index.php?djone=ufu

Но толку нету. Все равно ссылки куда то убегают http://djone.com.ua/asadasd
Как то на хостинге прошит свой метод перенаправления ненайденых страниц, как это обойти?
И вообще по сути сложившихся у меня задач по ЧПУ можете сказать?

Буду благодарен.

Sham
10-02-2009, 19:18
ЧПУ - числовое программное управление? Такие станки есть...

Смотря какие параметры скрипту нужны (по каким искать будет). Если ищется по id, то в урле по-любому где-нибудь это число должно быть (произвольно), чтобы его вытащить... а текст можно впоследствии сравнивать с базой, и выдавать 404 или 200... сначала сформируйте сам урл, а потом уже правило mod_rewrite...

Artem-Samsung
11-02-2009, 01:12
Скрипт, который выводит на экран информацию в обычном случае?
Если да, то ...

index.php?production=mixer&id=12

В index.php определяет на наличие mixer
else if (isset($_GET['mixer'])){include('modules/good_mixer.php');}


id - идентификационный номер товара

Получается приблизительно так

$sql=mysql_query("SELECT `content` FROM `de_dj_mixer` WHERE id='$_GET[id]'");


Или какую мне информацию предоставить для ясности?

Sham
11-02-2009, 01:48
сформируйте сам урл »
и как он будет выглядеть, с учетом id (без него сложно будет)..
если типа сайт.com/mixer/12/Behringer-DDM-4000.htm
тогда правило будет типа
RewriteRule ^/([a-z0-9A-Z]+)/([0-9]+)/.+\.htm$ /index.php?production=$1&id=$2 [L]

Artem-Samsung
13-02-2009, 00:41
Так работает http://djone.com.ua/index.php?production=mixer&id=12
Так не работает http://djone.com.ua/mixer/12/Behringer-DDM-4000.htm


DirectoryIndex index.php
RewriteEngine On
Options +FollowSymlinks
RewriteBase /
RewriteRule ^/([a-z0-9A-Z]+)/([0-9]+)/.+\.htm$ /index.php?production=$1&id=$2 [L]


Будьте любезны, подскажите

Sham
13-02-2009, 01:40
Artem-Samsung, зачем RewriteBase? Кроме того если это в корневом htaccess, то передний слеш не нужен...
DirectoryIndex index.php
Options +FollowSymlinks
RewriteEngine On

RewriteRule ^([a-z0-9A-Z]+)/([0-9]+)/[a-z0-9A-Z\-\_]+\.htm$ index.php?production=$1&id=$2 [L]

Artem-Samsung
13-02-2009, 10:54
К сожаление ошибка 404 :(
Хостинг один из лучших, мод этот стоять полюбому должен. Сейчас у них еще узнаю.

http://djone.com.ua/mixer/12/Behringer-DDM-4000.htm

никак не

http://djone.com.ua/index.php?production=mixer&id=12

Sham
13-02-2009, 20:58
проще самому проверить что просит, и работает ли правило..
сделайте скрипт test.php
<?php
echo 'Реврайт просит файл ' . @$_GET['wtf'];
echo ' (Если это файл как и в адресной строке, то правило не работает)';
?>

и правило на время (потом его убрать нужно)
поместить его после всех правил в списке

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule . test.php?wtf=%{REQUEST_FILENAME} [L]

и наберите снова псевдо-урл... если не выведет test.php то правила запрещены...

Artem-Samsung
14-02-2009, 21:47
http://djone.com.ua/mixer/12/Behringer-DDM-4000.htm


Реврайт просит файл ...djone.com.ua/mixer
(Если это файл как и в адресной строке, то правило не работает)



Похоже не сильно то работает (

Sham
14-02-2009, 23:21
сори, ошибочка закралась в символьном классе [a-z0-9A-Z\-\_] - символ _ не должен быть последним в наборе...

RewriteRule ^([a-zA-Z0-9]+)\/([0-9]+)\/[a-zA-Z0-9\_\-]+\.htm$ index.php?production=$1&id=$2 [L]

и определитесь с символами в имени файла (если что другие добавьте с экраном) - иначе тоже 404 будет, если не a-zA-Z0-9_-...

и все ваши данные удалите из постов (пути, ссылки...) - могут вызвать нездоровый интерес...

Artem-Samsung
14-02-2009, 23:49
Ухты =))) Спасибо. Прогресс есть :)

Вот только
Со стилями неочень.
http://djone.com.ua/mixer/12/Behringer-DDM-4000.htm

Пути к картинкам прописываются на подобии:
http://djone.com.ua/mixer/12/banner.gif

Хотя должно быть
http://djone.com.ua/banner.gif

Не подскажите?

Sham
14-02-2009, 23:50
у вас на страничке пути относительные, нужны абсолютные, с передним слешем /js/file.js либо псевдо-урл без слешей нужен...

Sham
15-02-2009, 00:08
если урл нпр будет http://djone.com.ua/mixer~12~Behringer-DDM-4000.htm
то правило
RewriteRule ^([a-zA-Z0-9]+)\~([0-9]+)\~[a-zA-Z0-9\_\-]+\.htm$ index.php?production=$1&id=$2 [L]
и проблем с относительными ссылками не возникнет...

Artem-Samsung
23-02-2009, 16:16
Sham,

Нужно грамотно составить правило для

index.php?production=mixer
index.php?production=bag
index.php?production=cddvd
index.php?production=monitor

Самому не получается :(
Пробел в регулярных выражениях, будет время - разберусь.

Если Вас не затруднит? Могли бы подсказать, как лучше оформить?

Sham
24-02-2009, 01:23
Artem-Samsung, тот же урл, но без id?

Artem-Samsung
24-02-2009, 02:50
понятно, а вот в этом участке ^([a-zA-Z0-9]+)\~([0-9]+)\~[a-zA-Z0-9\_\-]+\.htm$ что то править?

Sham
24-02-2009, 03:32
чего понятно, это вопрос был (это тот же урл но без ид?)... и псевдо-урл какой будет..

Artem-Samsung
24-02-2009, 04:03
вопрос был (это тот же урл но без ид?) »
Прошу прощения.

Да, без айди, но это уже другой тип страниц будет.

index.php?production=monitor - это главная страница типа продукции
Можно так? poduction/monitor.htm
index.php?production=monitor&id=20 - это полное содержания еденицы товара

Еще будет место таким ссылкам, как
index.php?monitor=Adam - где список товаров только с маркой Adam
Предположительно: /monitor/adam.htm
но это сам по аналогии index.php?production=monitor думал сделать. проблемм не будет?

P.S. горизонтальное меню : ?djone=5
Новости: index.php?news=38

Меня волнует пока вот это index.php?production=monitor, другие постараюсь по аналогии сделать

Sham
24-02-2009, 04:53
Можно так? poduction/monitor.htm »
RewriteRule ^production\/([a-zA-Z0-9\_\-]+)\.htm$ index.php?production=$1 [L]

Еще будет место таким ссылкам, как
index.php?monitor=Adam - где список товаров только с маркой Adam
Предположительно: /monitor/adam.htm
но это сам по аналогии index.php?production=monitor думал сделать. »

RewriteRule ^([a-zA-Z0-9]+)\/([a-zA-Z0-9\_\-]+)\.htm$ index.php?$1=$2 [L]

и в том же духе




© OSzone.net 2001-2012