Зачем нужны "красивые" URLы и как их сделать (Apache/mod_rewrite)
Современные движки сайтов и прочие скрипты передают кучу параметров. Страницы прячутся за id. Это имеет по крайней мере два негативных последствия.
Структура сайта тяжело читаема по текущему адресу.
Поисковики не типа google не заходят по ссылкам одной страницы глубже чем на три уровня. Таким образом из индексирования выпадает существенная часть материала (зачастую самая ценная).
Чтобы придать url-ам красивый вид в web сервере Apache есть модуль mod_rewrite
Отметим что этот модуль также позволяет перенаправлять входящие запросы куда угодно. Например можно обеспечить совместимоть при перестройке структуры сайта.
Главные условия использования:
1 Подключенный в /etc/apache/modules.conf mod_rewrite
2 Разрешения в /etc/apache/httpd.conf или файлах настройки виртуальных серверов AllowOverride для каталога
3 Права на создание или редактирование файлов .htaccess в соответствующих каталогах на хостинге
Пример:
В modules.conf LoadModule rewrite_module /usr/lib/apache/.../mod_rewrite.so
В httpd.conf
<Directory /home/siteroot>
AllowOverride All
</Directory>
В каталоге /home/siteroot файл .htaccess будет содержать нечто вроде:
Options -Indexes +FollowSymLinks
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([0-9]+)/([A-Za-z]+)/\?(.*)$ /index.php?page_id=$1&lang_id=$2&$3 [QSA]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([0-9]+)/\?(.*)$ /index.php?page_id=$1&$2 [QSA]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([0-9]+)/([A-Za-z]+)/?$ /index.php?page_id=$1&lang_id=$2 [QSA]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([0-9]+)/?$ /index.php?page_id=$1 [QSA]
</IfModule>