ЧПУ - человеко понятные урлы. | Альтернативный Форум

ЧПУ - человеко понятные урлы.

  • Автор темы Автор темы metallphilin
  • Дата начала Дата начала
M

metallphilin

НЛО опубликовал
кто знает как с помощью MOD REWRITE сделать ЧПУ.

Например у меня идет ссылка через php:

Link hidden, please Sign in or Sing up


через опись mod rewrite это выглядело бы так:

Link hidden, please Sign in or Sing up

Согласитесь куда лучше смотрится. + очень хорошо цитирется поисковыми машинами.

Вопрос - как сделать :)
 
xakep.ru там всё подробно описано, к сожалению щас инета нет, так что подробно не могу сказать..но там делаеццо через регулярные выражения...щас гляну мож остался пример...
относительно твоего примера эт будет выглядеть так
RewriteEngine On
RewriteRule ^ ([0-9]+)/ ([0-9]+)/ ([0-9]+).html top.php?cat=$1&sort_top=$2&sort=$3
но учти, если у тя будет например Link hidden, please Sign in or Sing up
то всё сдвинеццо, и ещё этот пример делает цифры, если нужны буквы то будет ([a-zA-Z]+) мона поставить любоей не пробельный символ, эт будет ([\w]+) помоему....естественно строчку нужно писать в .htaccess
P.S и хватит уже грить про цитирование поисковиками..цитируют они одинаково, им без разници по каким ссылкам идти, они грузят страницу, выдерают ссылки и идут по ним..ну сам посуди, вот форум IPB и даже твой, не состоит из ЧПУ а по запросам находиццо на первых местах как собсна и другией форумы и проекты...ЧПУ тут не причём, всё дело в ссылках, например те нужна 20 новость, ссылка выглядит так index.php?news=20, вот поисковик её просканил и потом выдаёт такую ссылку, допустим ты удалил 10 новость, и если движок сделан нормально то 20 новость так и должна остаццо 20-й а не сдвинуццо на 19-ю как и все остальные, т.е поисковик будет выдавать ссылку на совсем другую новость, до того естественно пока он заново твой сайт не просканит, так что хоть у тя тут ЧПУ хоть обычные урлы, толку ноль, всё зависит от системы, вот тут форум сделан пральна...моя Smalta CMS к сожелению нет..хотя поисковики тоже неплоха её сканят...
 
нашел - Link hidden, please Sign in or Sing up

Q: Подскажи, каким образом можно замаскировать использование скрипта на сервере. Для меня это очень актуально: нужно, чтобы клиенты, как и прежде, обращались к нему, но при этом не догадывались, что имеют дело не с динамической структурой, а со статической страницей.

A: Верный ход в твоем случае — воспользоваться возможностями файла .htaccess и модулем Mod Rewrite. К счастью, последний установлен практически на любом хостинге, даже самом дешевом. Допустим, что скрипту передаются два параметра: первый задает тип авторизации, а второй — числовой идентификатор пользователя. URL-адрес такой страницы будет примерно следующим: Link hidden, please Sign in or Sing up. Чтобы спрятать вызов скрипта достаточно добавить в .htaccess 2 следующие строчки:

RewriteEngine On

RewriteRule ^ ([a-zA-Z]+)/ ([0-9]+).html login.pl?type=$1;id=$2

Готово. Теперь страница легко отзовется по адресу: Link hidden, please Sign in or Sing up. Теперь комментарии по коду. Первая строчка включает механизм переписывания URL (подрубает модуль Mod Rewrite). Вторая более сложная: сначала с помощью регулярного выражения она бьет адрес на 2 составляющие (в переменную $1 записывается часть адреса до слеша «/», а в переменную $2 заносится номер, стоящий до .html), после чего преобразует URL в нужный нам вид. Просто внимательно посмотри на нее — и все станет ясно.

Единственная сложность заключается в том, чтобы постоянно отслеживать URL. Если об этом не позаботиться, то настоящий URL обязательно засветится во время перехода, осуществляемого самим скриптом. Сложность, впрочем, легко разрешима — нужно лишь написать простую функцию для преобразования URL и использовать ее для любой навигации по сайту.

Вообще, интересная штука этот Mod Rewrite. Можно молниеносно огородить себя от скрипткидиссов и любителей искать уязвимые сценарии через Google. Едва ли кому-то придет в голову заморачиваться со статическим URL и тем более пытаться завалить сайт с помощью дежурных подстановок — ‘1, ../../../, |id| и т.д. Но даже если кто-то и решится, то ничего у него не выйдет.

ЗЫ: про поисковики я тебе потом напишу.
 
Н Е Р А Б О Т А Е Т​


Блин запарил он меня 500-той ошибкой.

Ну вот у меня ссылка блин:

Link hidden, please Sign in or Sing up

я пишу ему суке:

Код:
RewriteEngine On

RewriteRule ^ ([a-zA-Z]+)/ ([0-9]+).html portfolio.php?photo_id=$1;&start=$2

он мне выдает 500-тую, вежливо (и вероятно про себя) посылает на ...

пищет в лог ошибок - RewriteRule: bad flag delimiters


делиметерсы ему мои не нравюццо... хех чо удумал, мои-то пилять дилимитерсы?!



PS: а чо такое дилимитерсы? :huh:
 
Последнее редактирование:
metallphilin сказал(а):
а чо такое дилимитерсы? :huh:
Вообще, делиметр - это разделитель. А подробнее - вот цитата из Лингво, может поможет:
delimiter
разделитель символ (пробел, табуляция, запятая, скобки, ключевые слова и т.п.) или строка, служащие для разделения между собой каких-либо элементов (данных в файле; записей в базе данных; операторов, имён, выражений или параметров в программе и т.д.). Наиболее часто в качестве разделителей используется запятая или символ табуляции, в таких случаях говорят о comma-delimited file или о tab-delimited file
 
смущает мя символ ^, вообще в регулярных выражениях он показывает претензию к началу строки..я в принципе делал, у мя работало, но мне не понравилось, т.к при заходе в папку у мя глючили картинки, т.к они не привязаны к корню..
попробуй снести пробел после слеша "/"
Кстати неисключено что функция отключена на сервере и On тут не поможет..., на izmuroma работало вроде.
кстати на это смарел?!
500-я ошибка может быть вызвана следующими причинами:
1. неверный синтаксис .htaccess
2. файл .htaccess записан в формате Windows, а должен быть записан в формате UNIX
а то я смарю ты на локальном гоняешь..
 
Последнее редактирование:
мля Сань, ну ты отжог, я чёт сначала не заменил епть блин
"http://localhost/portfolio.php?photo_id=3&start=0"
у тя photo_id=3 а 3 это цифра, она не входит в инетрвал от а до z и от А до Z, по этому нада использовать ([0-9]+) и пробел всё же сотри...
 
один хрен не пашет ничо... 500 и хоть убейся вот лог ошибок:

[Wed Dec 06 15:00:33 2006] [alert] [client 127.0.0.1] z:/home/s7.ru/www/.htaccess: RewriteRule: bad flag delimiters
[Wed Dec 06 15:00:33 2006] [alert] [client 127.0.0.1] z:/home/s7.ru/www/.htaccess: RewriteRule: bad flag delimiters
[Wed Dec 06 15:00:33 2006] [alert] [client 127.0.0.1] z:/home/s7.ru/www/.htaccess: RewriteRule: bad flag delimiters
[Wed Dec 06 15:00:33 2006] [alert] [client 127.0.0.1] z:/home/s7.ru/www/.htaccess: RewriteRule: bad flag delimiters
[Wed Dec 06 15:00:33 2006] [alert] [client 127.0.0.1] z:/home/s7.ru/www/.htaccess: RewriteRule: bad flag delimiters
[Wed Dec 06 15:00:33 2006] [alert] [client 127.0.0.1] z:/home/s7.ru/www/.htaccess: RewriteRule: bad flag delimiters
[Wed Dec 06 15:00:34 2006] [alert] [client 127.0.0.1] z:/home/s7.ru/www/.htaccess: RewriteRule: bad flag delimiters
[Wed Dec 06 15:00:34 2006] [alert] [client 127.0.0.1] z:/home/s7.ru/www/.htaccess: RewriteRule: bad flag delimiters
[Wed Dec 06 15:00:34 2006] [alert] [client 127.0.0.1] z:/home/s7.ru/www/.htaccess: RewriteRule: bad flag delimiters


и т.д. соб-но.
 
Я в это глубоко никогда не лез, но вот что например у меня прописывалось при настройке Nuke в .htaccess


#ENCYCLOPEDIA
RewriteRule ^dic([1-9][0-9]*)all([[a-zA-Z0-9]*).* modules.html?name=Encyclopedia&op=terms&eid=$1&ltr=$2
RewriteRule ^term([1-9][0-9]*)-([1-9][0-9]*).* modules.html?name=Encyclopedia&op=content&tid=$1&page=$2
RewriteRule ^term([1-9][0-9]*).* modules.html?name=Encyclopedia&op=content&tid=$1
RewriteRule ^dic([1-9][0-9]*).* modules.html?name=Encyclopedia&op=list_content&eid=$1
RewriteRule ^encyclopedia.* modules.html?name=Encyclopedia&file=index

#FAQ
RewriteRule ^faq.html modules.html?name=FAQ&file=index
RewriteRule ^faq-([a-zA-Z0-9+]*)-([0-9]*)-([a-zA-Z0-9+]*) modules.html?name=FAQ&myfaq=$1&id_cat=$2&categories=$3

#FILES
RewriteRule ^files.html modules.html?name=Files
RewriteRule ^files_add.html modules.html?name=Files&go=add_file
RewriteRule ^files_cat([0-9]*).html modules.html?name=Files&go=showcat&cid=$1
RewriteRule ^files_cat([0-9]*).html modules.html?name=Files&go=cat&cid=$1
RewriteRule ^files_view_file([0-9]*).html modules.html?name=Files&go=view_file&lid=$1
Тут конечно для конкретной системы, но вдруг эти записи подскажут чего :)
 
чует мой мозг тут нада риальную доку по всему этому делу... хотя если прошарить как это делать, то можно такова натворить.... например ставить разширение не html а asp или еще какое нить - вот сиди и догадывайся как сайт сделан и как его "хакнуть" ;)
 
metallphilin
да тут и так всё проще не куда...а в принципе хоть щас мож заменить html на asp и будет работать, даже в том примере который ты собираешься сделать, там же дописываеццо .html ну вот ставь .asp и всё, кстати на xakep'е тоже об этом есть..
 
2metallphilin:
Хм... .htaccess в студию, а также передаваемый линк и тот, который нужно получить. Чем смогу, помогу.
 
да походу у Фила чёт на локальном хосте, затестил то что не работало на izmuroma, всё ок
 
Эврика товарищи =) Подсказал один добрый человек на просторах необъятной паутины. вот как это делаеццо:

RewriteRule ^portfolio([0-9]*)/([0-9]*).html$ /portfolio.php?photo_id=$1&start=$2

и так соот-но для каждого файла, НО гвоздь в том что в самих файлах ссылки должны прописываццо как уже переменные... ибо вывода все равно не будет как ЧПУ, но

Link hidden, please Sign in or Sing up вызываеццо без проблем. если же в аксесе прописать например asp или gtk или xml или vasya, то соот-но вывод идет

Link hidden, please Sign in or Sing up

что не может не радовать.. щас буду разбираться как это сделать в самом движке.

Добавлено через 15 минут:

хе... ну и КАК соб-но это сделать в самом движке :huh:

<a href=/portfolio.php?photo_id=$myrow[0]>$thumbnail</a>

$myrow[0] - переменная соб-но номера картинки.
$thumbnail - соб-но сама картинка.

Конечно ничего не мешает сделать так:

<a href=/portfolio/$myrow[0].html>$thumbnail</a>

конечно ссылка идет как нужно, НО сам php скрипт не обрабатывается - ибо с чего бы ему обрабатываться. :rolleyes:

ЗЫ: нашел доку - http://af.net.ru/showthread.php?p=41676#post41676 но там амздец - без стакана не разберешься :eek:
 
Последнее редактирование:
Rembo сказал(а):
вот это нах обьясни плз, у тя чё ссылки идут типа portfolio1/ или portfolio2/?!


нет они у меня идут

/portfolio.php?photo_id=1
/portfolio.php?photo_id=2
/portfolio.php?photo_id=3

и т.д.
 
Написал: censored
Вот. А для того чтобы он правильно обрабатывался, и нужен RewriteRule в htaccess

Т.е. смотри сам принцип:
Есть, например, такая ссылка:
Link hidden, please Sign in or Sing up

Она выводится на страницу.
При клике - она в адресной строке.
Т.е. идет обращение к сайту siteurl, к его index.php и ему уже передается параметр p равный 12345
Когда ты ссылку выводишь на старницу в таком виде:
Link hidden, please Sign in or Sing up
То идет обращение к папке 12345 которая лежит в корне. Т.е. скрипту ничего не передастся (правда если у тебя на сайте нету папки 12345 в которой лежит index и из которого идет обращение к скрипту).
И поэтому чтобы ссылка Link hidden, please Sign in or Sing up понималась правильно и индексу передавался параметр со значением, то ты в RewriteRule в htaccess ее переопределяешь.
Т.е. типа так в htaccess и говоришь: "если зайдут по ссылке Link hidden, please Sign in or Sing up то на самом деле имеется в виду что зашли по ссылке Link hidden, please Sign in or Sing up".


Это я уже понял, но смотри.

Вот у меня идет таже самая ссылка портфолио:

Link hidden, please Sign in or Sing up


Я пишу в аксесе:

RewriteRule ^portfolio/([0-9]*).html$ /portfolio.php?photo_id=$1

Пишу в движке:

<a href=/portfolio/$myrow[0].html>$thumbnail</a>

Ссылки у меня выводятся как:

Link hidden, please Sign in or Sing up
Link hidden, please Sign in or Sing up
Link hidden, please Sign in or Sing up и т.д.

При клике на любую из ссылок он меня редиректит в САМ РАЗДЕЛ Link hidden, please Sign in or Sing up без конкретной работы - 1.html 3.html и т.д. соот-но так же и с новотями.

Сам принцип мне понятен, но скрипт то не обрабатывается, php-ный..... :( т.е. по идеи при клике на Link hidden, please Sign in or Sing up он должен бы редиректить юзера на Link hidden, please Sign in or Sing up но он этого не делает

где ошибка?
 
сервер виртуальный сука тупил :(

Сделал кароче. =) Вот мой аксес:

RewriteEngine On
Options +FollowSymlinks
RewriteRule ^index/?$ /index.php [L]
RewriteRule ^portfolio/?$ /portfolio.php [L]
RewriteRule ^portfolio/work-([A-Za-z0-9-]+)/?$ /portfolio.php?photo_id=$1 [L]
RewriteRule ^portfolio/work-([A-Za-z0-9-]+)/start-([A-Za-z0-9-]+)/?$ /portfolio.php?photo_id=$1&start=$2 [L]
RewriteRule ^portfolio/start-([A-Za-z0-9-]+)/?$ /portfolio.php?start=$1 [L]
RewriteRule ^archive/?$ /archive.php [L]
RewriteRule ^archive/news-([A-Za-z0-9-]+)/?$ /archive.php?news_id=$1 [L]
RewriteRule ^archive/start-([A-Za-z0-9-]+)/?$ /archive.php?start=$1 [L]
RewriteRule ^archive/([A-Za-z0-9-]+)/?$ /archive.php?start=$1 [L]
RewriteRule ^servises/?$ /servises.php [L]
RewriteRule ^support/?$ /support.php [L]
RewriteRule ^about_us/?$ /about_us.php [L]
RewriteRule ^theory/?$ /theory.php [L]

Вот как это смотриццо на сайте - Link hidden, please Sign in or Sing up
 
Назад
Верх Низ