1. Пускаш си mod rewrite от apache.
2. Във главната директория на сайта ти (там където е index.php), правиш нов файл:
.htaccess (без име, само разшерението). Във него слагаш следното:
Код:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php [QSA,L]
</IfModule>
3. Сега като влезнеш във папката на сайта (където е този .htaccess), всичко каквото пишеш във URL, ако не е директория или файл ще го препраща към index.php
4. Пример:
<?php
$url = $_SERVER['REQUEST_URI'];
?>
Сега тази променлива $url ти държи цялото въведено URL, сега посредством explode(); си разделяш url - то и си използваш въведените неща.
Въвели сме примерно localhost/galery/12/
PHP:
<?php
$url = $_SERVER['REQUEST_URI'];
$url = explode('/', $url);
/** Просто премахваме празните елементи от масива (преди и след наклонената черта) */
$url = array_filter($url);
/** Тук казваме, че първия елемент от url - то примерно е някой файл */
$file = $url[0];
/** Тук казваме, че втория елемент е примерно ID на снимка */
$id = $url[1];
/** Правим една заявка към базата данни примерно, че въведеното число във URL - то е ID на снимка */
$row = mysql_query("SELECT link FROM img WHERE id = $id");
echo '<img src="'.$row['link'].'" />';
?>
Още едно нещо, тъй като ти се препраща към index.php, там може да направиш един dispatcher, който според това какво си въвел да ти инклулдва коректния файл.
Горният пример ще стане:
include $file.'.php';
Тоест да ти инклудне файла galery и вече във него да си съставяш логиката от другите елементи от урл - то. То това общо взето се използва за MVC модела. Разделя се URL - то на 3: controller, method and values.
Да добавя още, ако сайта ти се намира във някоя папка, а не директно във www папката, тогава за да изкараш какво си въвел във URL - то може да използваш примерно една такава функция:
PHP:
function getUrl() {
$url = $_SERVER['REQUEST_URI'];
$base = dirname($_SERVER['PHP_SELF']);
if(strlen($base) > 0) {
$url = substr($url, strlen($base));
}
$values = explode('/', $url);
$values = array_filter($values);
return $values;
}
ЕДИТ:
Може би те обърках с горния код. Този код горе е полезен ако искаш да имаш front controller ...
При теб може да направиш нещатата така:
Във .htaccess пишеш само
Код:
RewriteEngine on
RewriteRule ^galery/([^/.]+)/?$ galery.php?id=$1 [L]
Линка за достъп до galery.php?id=5 като както горния пример, id ще е id на снимка във базата данни.
Сега, попринцип за достъп до тази страница трябва да напишеш:
http://localhost/galery.php?id=5
обаче rewrite като види такъв линк, автоматично валидира и този линк да бъде правелен:
http://localhost/galery/5
И 2 та линка ще имат еднакъв резултат.
Важно: Щом работиш със .htaccess винаги работи със абсолютни пътища.
Тоест не <a href="galery/5/">Pic</a>, ами ще стане:
<a href="http://localhost/galery/5/">Pic</a>
За да достъпиш числото 5 от url - to, може да си използваш: $_GET['id'];, при този начин за преправяне не url, не е нужно да използваш $_SERVER за достъп до елементите.