Начнём с термина ЧПУ-абривиатура-Человеко-понятный урл.
Веь смысл чпу заключается в том, что бы преобразовать ссылку вида: /forum.php?id=21312312
в /forum/stasik_hasker или /forum/Стасик_хацкер. Согласитесь пользователю так гораздо удобней, и воспреимчевей. Тем более поисковые системы тоже лучше воспринимают инфу в ЧПУ.
Весь этот фокус основан на .hattacess . Возмём подалуй его из одной цмс (wikimobile.su)
вот код
php_flag display_errors 1
php_value register_globals 0
php_value session.use_trans_sid 0
php_value magic_quotes_gpc 0
php_value magic_quotes_runtime 0
php_value magic_quotes_sybase 0
php_value allow_url_fopen 1
php_value arg_separator.output "&"
DirectoryIndex index.php
AddDefaultCharset UTF-8
Options -Indexes
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^file([0-9]+)/(.*?)$ ?do=down&file=$1 [B]
RewriteRule ^cat/(.{1,200})$ razd.php?act=viewcat&name=$1 [B]
RewriteRule ^razd/(.{1,200})$ razd.php?act=viewrazd&name=$1 [B]
RewriteRule ^wiki/(.{1,200})/([0-9]+)/(.{2})$ ?wiki=$1&p=$2&lang=$3 [B]
RewriteRule ^wiki/(.{1,200})/(.{2})$ ?wiki=$1&lang=$2 [B]
RewriteRule ^wiki/(.{1,200})/([0-9]+)$ ?wiki=$1&p=$2 [B]
RewriteRule ^wiki/(.{1,200})$ ?wiki=$1 [B]
ErrorDocument 402 /?do=404
ErrorDocument 403 /?do=404
ErrorDocument 404 /?do=404
ErrorDocument 500 /?do=404
Исходя из этого файла ледует, что ЧПУ делается путём регулярного выражения на mod rewrite
Давайте же изменем данный файл, под наш импровизированный форум. Всй проще некуда, заменяем строку
RewriteRule ^cat/(.{1,200})$ razd.php?act=viewcat&name=$1 [B]
наRewriteRule ^forum/(.{1,200})$ forum.php?name=$1 [B]
тоесть, то что идёт в URL за словом forum/ будет автоматом направляться в наш скрипт в гет запросе в переменную $_GET['name'].
Теперь надо преобразовать сам наш форум,
раньше у нас было получение по уникальному id :
$idi=ceil(intval($_GET['id'])); //Получаем ид в вводимом юрл
$olo=mysql_Query("select * from `forum` where `id`=$idi"); //Получаем данные топика
if (mysql_num_rows($olo)==0) { //если нет темы, обрываем скрипт
echo 'Net temi';
exit();
}
else {
$poo=mysql_fetch_assoc($olo);
// отображаем тему
}
теперь надо переделать наш форум под ЧПУ
$name=mysql_real_escape_string(rawurldecode(trim($_GET['name']))); // получаем название топика, и раскодируем его из юрл формата? А также защищаемся от иньекций
$olo=mysql_query("select * from forum where `name1`='$name'"); // получаем тему по полю name1 (потом обьясню)
if (mysql_num_rows($olo)==0){
exit('net temi'); }
else {
$poo=mysql_fetch_assoc($olo);
}
(чтобы отобразить ссылку на тему, нужно писать так echo '<a href="/forum/'.rawurlencode($poo['name1']).'">'.$poo['name'].'</a>'; Нужно обязательно закодировать название данной функцией, функция кодирует все символы в юрл-формат, если же вы это не сделаете, у вас на страницах будут синкт. ошибки (надо кодировать только адрес)
И последний аспект - если в названии темы будут пробелы, ОНИ БУДУТ ЗАМЕЩАТЬСЯ ФУНКЦИЕЙ RAWURLENCODE на символы %20 . это не очень красиво,и поэтому надо перед созданием топика,
вписать следущий код $name1=str_replace(' ','_',$name); и добавить дополнительный столбец в таблицу forum, такой же как и `name` это заменит все некрасивые символы на подчёркивание.