Перейти к содержимому

Сервис обмена электронных валют


ЧПУ ссылки

#1 Banderas

Banderas
  • Пользователь
  • 1 168 сообщений
  • Репутация: 1
0

Отправлено 16 Февраль 2011 - 01:22

Здравствуйте. Сейчас загорелся желанием написать свой блог. Уже кое-что достиг (редактор статей, удаление статей, комментарии, разбил на категории, ...). Сейчас захотел сделать ссылку на статью, вида"сайт.ру/название-статьи.РНР" на "сайт.ру/категория/название-статьи.ХТМЛ".
Знаю, что для этого надо использовать файл, который работает с Апачи, тоесть .htaccess
Я создал такой сайт, и для теста прописал
DirectoryIndex index.php
ErrorDocument 404 /404.php

Проверил - все подключилось, теперь осталось править файлик как надо. Или для реализации моей идеи нужен другой подход?

Сейчас у меня корневая папка, в которой идет
index.php
categories.php - принимаю выбраную категорию и передаю эти данные в articles.php
articles.php - выбираю все записи из БД, с категорий, которую передал предыдущий файл

 

 

  • 0


#2 ZiTosS

ZiTosS
  • Пользователь
  • 5 148 сообщений
  • Репутация: 8

Отправлено 17 Февраль 2011 - 18:12

Banderas, Я знаю как минимум 2 подхода реализации ЧПУ в естественной форме:
1) Mod Rewrite
2) PHP router (Статья)

Решаем, что лучше - (английский):
http://stackoverflow...e-or-php-router

С чего-то всегда нужно начинать, думаю стоит поюзать способ с mod_rewrite в чистом виде, заодно и регулярки поднатаскаешь :mellow:
Вообщем способ с mod_rewrite прост до свинства для твоего примера:
# так будем обозначать комментарнии

RewriteEngine On # включаем модуль mod_rewrite

# далее можно использовать правила разбора RewriteRule
# RewriteRule [правило разбора] [куда перенаправить сервер] [флаги]
# ^...$ - предполагается полное совпадение
# () - карманы, которые затем можно использовать в качестве значений так - $[номер кармана]

RewriteRule ^[_-A-Za-z0-9]+/([0-9]+)-[_A-Za-z0-9]+.html$ articles.php?id=$1 [L]

# [_-A-Za-z0-9]+ - это у нас название категории, оно нам нафиг не нужно, но под маску подходить должно
# / - слеш он и в Африке слеш.
# ([0-9]+) - это id статьи, помещенный в карман, должен сосоять из последовательности цифр
# Далее идет дефис "-"
# [_A-Za-z0-9]+ - название статьи тоже нам не нужно, но под регулярку подходить должно
# .html - ну и окончание URL
Всё очень просто и понятно, когда пользователь обращается к серверу, на котором лежит файл .htaccess с mod_rewrite. Модуль сервака читает содержимое данного файла и пытается сопоставить УРЛ, запрошенный пользователем с правилами (регулярками), если найдется совпадение, серверу для обработки будет отдан URL с подменой.

Примеры URL:
http://site.ru/category1/15-Nazvanie_article.html - нормально пройдет
http://site.ru/category-my/341-article_name.html - нормально пройдет

http://site.ru/category1/15-Nazvanie-article.html - не пройдет, название статьи не пройдет регулярку из-за дефиса
http://site.ru/!category1/15-Nazvanie_article.html - не пройдет, категория не пройдет регулярку из-за знака "!"
http://site.ru/category1/15-Nazvanie_article.htm - не пройдет, т.к. в регулярке .html, а не .htm

http://site.ru/category1/subcategory/15-Nazvanie_article.html - не пройдет, у нас регулярка не рассчитана под подкатегории

Конечно ты мне не показал, как у тебя происходит выдача одной статьи, категории и т.д., но суть должен уловить.
  • 0

#3 Banderas

Banderas
    Topic Starter
  • Пользователь
  • 1 168 сообщений
  • Репутация: 1

Отправлено 17 Февраль 2011 - 22:37

Спасибо, как только освобожусь попробую все на деле! :mellow:

У меня два файла, которые отвечают за вывод статей:
1) файл категорий Прикрепленный файл  categories.php   1,12К   Количество загрузок: 68
2) файл вывода выбранной статьи Прикрепленный файл  view_article.php   1,86К   Количество загрузок: 60
  • 0

#4 Banderas

Banderas
    Topic Starter
  • Пользователь
  • 1 168 сообщений
  • Репутация: 1

Отправлено 28 Февраль 2011 - 17:49

Спасибо, сначала не понял, но Дима мне помог собрать силы и добить этот вопрос, сейчас кое что получилось, но не все так как хочется...
Есть ссылка
http://pop.ru/view_article.php?id=22
Благодаря следующему коду
RewriteEngine On
RewriteRule ^article-id-([0-9]+)/? view_article.php?id=$1 [L]
я могу к ней обратиться как
http://pop.ru/article-id-22
Но когда я в браузере листаю статьи, она отображается как в первом варианте, а я хочу то бы по умолчанию было как у втором

Вообще, в идеале хочу сделать что бы вместо id было название статьи, как это сделать (алгоритм)
  • 0


#5 ZiTosS

ZiTosS
  • Пользователь
  • 5 148 сообщений
  • Репутация: 8

Отправлено 06 Март 2011 - 22:49

Banderas,

Но когда я в браузере листаю статьи, она отображается как в первом варианте, а я хочу то бы по умолчанию было как у втором

Тут всё зависит от того, как ты ссылки пропишешь в своём скрипте при выводе инфы в браузер. Генерируй ссылку в нужном формате.

Вообще, в идеале хочу сделать что бы вместо id было название статьи, как это сделать (алгоритм)

Есть два варианта реализации подобной фичи:
1) id + транслитом заголовок статьи - при обращении вырезать только id и работать с ним, а транслит только для красоты
2) транслит заголовка - при обращении к странице, тебе надо будет вырезать название латиницы далее сверять его с латиницей всех заголовков статей в базе (можно в базе специально создать поле с заголовком статьи латиницей, чтоб искать по базе, а не в скрипте). Если нашлось совпадение - это наша статья.
Так же не забываем, что даже в ЧПУ нам надо определяться, к чему мы обращаемся (особенно если скрипт или ваш движок работает не только со статьями)

Я бы сделал так:
RewriteRule ^/article/([0-9]+)-title-article.html$ view_article.php?id=$1 [L]

  • 0


Оформление форума – IPBSkins.ru