не понятен принцип работы ЧПУ

F8
На сайте с 17.09.2010
Offline
1
1756

Знаю тему обсуждали много. Читал статьи форум. Не могу понять как работает чпу. Есть самописный сайт на пхп. Хочется преобразовать ссылки вида http://mysite/view_post.php?id=4 в http://mysite/444.html. Преобразованные "красивые" ссылки хранятся в БД. Т.е. как я понимаю при нажатии на ссылку(ниже фрагмент кода выводящая эти ссылки)


<?php
.....
printf("<a href='view_post.php?id=%s'>%s</a>", $myrow['id'], $myrow['title'], );
.....
?>

должен происходить редирект на главную страницу и там обрабатываться уже данная ссылка. Или же уже в данном коде вместо таких урл должны поставляться уже "красивые" ссылки из БД и дальше редиректиться на index.php ?

В .htaccess прописано :


RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^.*$ index.php [L,QSA]
D
На сайте с 09.07.2009
Offline
79
#1

Какой ещё редирект?

Смысл в создании читаемых урлов. Делается это в файле .htaccess с помощью регулярок.

Когда вы заходите на http://mysite/4.html сервер просто подменяет содержимое на содержимое http://mysite/view_post.php?id=4

Никаких редиректов нет.

Или я не понял вопроса?

Str01tel
На сайте с 27.12.2009
Offline
26
#2

скорее ТС имеет вииду преобразование на самом сайте

не обязательно хранить такие ссылки в БД, достаточно преобразовывать их с помощью preg_replace()

ну и конечно же незабываем про .htaccess (о чем уже писал digwnews)

F8
На сайте с 17.09.2010
Offline
1
#3
digwnews:
Какой ещё редирект?
Смысл в создании читаемых урлов. Делается это в файле .htaccess с помощью регулярок.

Это один из способов. Если страниц на сайте тысячи удобней использовать сочетание пхп с редиректом. В wordpress допустим для реализации этой функции используется пункт Постоянные ссылки(ЧПУ). Сомневаюсь что там идет работа в .htaccess с помощью регулярок.

RO
На сайте с 13.07.2009
Offline
88
#4
Если страниц на сайте тысячи удобней использовать сочетание пхп с редиректом.

это почему же?

используется пункт Постоянные ссылки(ЧПУ). Сомневаюсь что там идет работа в .htaccess с помощью регулярок.

а вы думаете для такой реализации нужно для каждой страницы писать правило? типа

RewriteRule ^stranicka_1.html$ /index.php?id=1 [L]

RewriteRule ^stranicka_2.html$ /index.php?id=2 [L]

вы не поняли всю силу регепсов :D

R5
На сайте с 22.03.2010
Offline
24
#5
RedOK:
вы не поняли всю силу регепсов :D

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

Например, когда мы юзаем какой-то свой продвинутый централизованный раутинг (например лайон-фреймвёрк и т.д.) не всегда значения полученные из квери_стринг будут являться параметрами для контроллеров. У нас может быть необходимость предварительной нормализации параметров, уточнение, задание дефолтовых, по какому либо условию, опять таки маршрутизация(отличная от простого маппинга квери_стринга в переменные) к конкретному екшену некоего контроллера и т.д.

В общем, я про то, что .htaccess конечно удобная штука, но не всегда её бывает достаточно, и что именно подойдёт ТС, зависит от его требований к движку - если то, что в сабжевом посте (http://mysite/view_post.php?id=4 в http://mysite/444.html) регулярок .htaccess должно хватить, однако, если правила маршрутизации команд описываются какими-либо композитными условиями и прочее, то имхо, полезно рассмотреть возможность вынесения раутинга/маршрутизации в отдельную подсистему его движка, разумеется включая абстракции объекта запроса/ответа, раутера, диспетчера и т.д. и это уже не просто обычные ЧПУ, а совершенно другое архитектурное решение

RO
На сайте с 13.07.2009
Offline
88
#6

ниасилил пыщь пыщь, а теперь десять символов?

D
На сайте с 09.07.2009
Offline
79
#7

RFC2505, более удачно будет просто привести пример.

R5
На сайте с 22.03.2010
Offline
24
#8

общий пример: возможность произвольно менять часть УРЛа на какой-то ресурс на сайте из красивой одминки. Здесь просто регулярок .htaccess не хватит. Точнее, может и хватить, если одминка будет писать в него все изменения, но имхо это неправильно, и вызовы конкретных екшинов должны разруливаться программными модулями в этом случае.

конкретный пример: TDS )

ну, ещё примеры 1, 2, 3, 4 и т.д.

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