Как сделать так чтобы из базы брались ссылки ЧПУ

B
На сайте с 05.09.2012
Offline
0
1282

Здравствуйте форумчане. Делаю сайт php с базой mysql. Интересует: возможно ли сделать ЧПУ, так чтобы они вытягивались из таблицы в базе. То есть чтобы вместо "http://localhost/phpsite/view_stars.php?link=kratkoe nazvanie statjy", подставлялась ссылка "http://localhost/phpsite/kratkoe nazvanie statjy" - это мне нужно чтобы ссылки были СЕО оптимизированы!

Вот какой у меня код:

<?php

$result = mysql_query("SELECT link FROM stars",$db);
$myrow=mysql_fetch_array($result);

do
{
printf
(" <div><a href='view_stars.php?link=%s'></a></div>",$myrow["link"]); /*вытаскиваю link с базы*/
}
while ($myrow=mysql_fetch_array($result));
?>

Затем :

if (isset ($_GET['link'])) 


{$link = $_GET ['link'];
}

$result = mysql_query("SELECT * FROM stars WHERE link='$link'",$db);
$myrow=mysql_fetch_array($result);

У меня получается такая ссылка: "http://localhost/phpsite/view_stars.php?link=kratkoe nazvanie statjy", а надо:"http://localhost/phpsite/kratkoe nazvanie statjy"

Если вопрос непонятен, сделать так как на этом сайте:http://cherrylady.ua/zvezdmiye-novosti/beyonse_provela_svoy_den_rojdeniya_na_yahte/

Для меня новичка формирование ЧПУ ссылок из базы было бы лучшим вариантом, вставил в таблицу ссылку и готово! Возможно реализовать как-то таким образом?

siv1987
На сайте с 02.04.2009
Offline
427
#1

Общий принцип

RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-f

RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule (.+) view_stars.php?link=$1 [L]

Паттерны для RewriteRule можно написать более конкретные, чтобы преобразовать нужные ссылки и не захватить лишние.

Ликбез

http://www.google.ru/search?client=opera&rls=ru&q=mod_rewrite&sourceid=opera&ie=utf-8&oe=utf-8&channel=suggest

B
На сайте с 05.09.2012
Offline
0
#2

Ну так это надо задействовать .htaccess? Без него никак? Я хочу сделать один шаблон article.php и из него вытаскивать нужную статью, тогда мне нужно будет прописать правило выше изложено вами? Будет ли работать это правило для всего сайта или только к конкретному примеру?

---------- Добавлено 05.09.2012 в 17:16 ----------

А если у меня будет много страниц, так что мне надо будет прописывать это правило для каждой страницы?? Нету единого правила для всего сайта... или может есть какое-то поумнее решение, что я привел, как лучше сделать?

siv1987
На сайте с 02.04.2009
Offline
427
#3
boichukvd:
Ну так это надо задействовать .htaccess? Без него никак?

Никак. Сами то вы себе это как представляете? Сервер каким образом будет определять ЧПУ? Либо htaccess, либо чрез имя исполняющего файла - view_stars.php/kratkoe-nazvanie-statjy/

boichukvd:
Я хочу сделать один шаблон article.php и из него вытаскивать нужную статью, тогда мне нужно будет прописать правило выше изложено вами? Будет ли работать это правило для всего сайта или только к конкретному примеру?

Будет работать для всех несуществующих файлов и директорий (короче ссылок).

boichukvd:
А если у меня будет много страниц, так что мне надо будет прописывать это правило для каждой страницы?? Нету единого правила для всего сайта...

Это правило для "всего сайта". Настоятельно рекомендую почитать сабж и ФАК по нему, эти вопросы освещены в документации и тысячи примеров по сети. Иначе лучше просто забить и использовать простые ссылки.

B
На сайте с 05.09.2012
Offline
0
#4

Спасибо за ответы! Буду использовать .htaccess!

дани мапов
На сайте с 06.09.2012
Offline
204
#5

.htaccess

---------------------------

RewriteRule ^([^./]+).html$ article.php?alias=$1 [L]

article.php

---------------------------

if (isset($_GET['alias']))

{

$sql = "SELECT * FROM content WHERE alias = '".$alias."' LIMIT 0,1";

$result=mysql_query($sql);

if (mysql_num_rows($result)==0)

{

$str = $alias.'.html';//для статических страниц

if (file_exists($str))

include($str);

else

{

header('HTTP/1.1 404 Not Found');

include($_SERVER['DOCUMENT_ROOT'].'/404.php');

}

exit();

}

......

При добавлении статей надо следить, чтобы не было совпадений названий статических страниц и поля "alias". Например, есть у вас страница 404.html, чтобы не было в базе статьи с alias = 404. И не забудьте, про обработку значений полученных из GET массива, этот код лишь показывает принцип работы.

Написание и доработка скриптов (PHP, MySQL, JavaScript, jQuery) (/ru/forum/811046)

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