Создание красивой ссылки зависит от программного обеспечения Хостинга. Так к примеру, если работа сервера основана на Майкрософт IIS, то в таком случаи стоит использовать ISAPI_Rewrite, если же в основе работы положен Apache, то тогда придется возится с mod_rewrite. Оба эти приспособления практически одинаковые в обращении, но все же есть свои отличия. Но поскольку Хостинг у меня использует Apache – остановлюсь подробнее на mod_rewrite.
О! Модуль mod_rewrite Apache(-а) имеет могущественную силу. При помощи это модуля можно осуществить переадресацию посетителя, сделать подмену страницы, вывести страницу ошибки 404 и на этом его возможности не заканчиваются. Поскольку нам сейчас интересен вопрос создания красивой ссылки, то остановимся только на этом.
Для создания красивой ссылки нам понадобиться файл .htaccess и собственно сам модуль mod_rewrite. Если модуль, ка правило, включен по умолчанию в Apache, то вот файла .htaccess может не быть на сайте. Это не проблема. Открываем блокнот, создаем текстовый файл и помещаем его в корень нашего сайта. Затем с помощью файлового менеджера переименовываем этот файл в .htaccess
Прежде чем перейти к трансформации URL-а, рассмотрим замысловатые коды и обозначения модуля mod_rewrite Apache(-а), которые применяются для создания условий и начнем с наиболее часто используемых флагов, что записываются внутри квадратных скобок после регулярных правил, выражений
L | останавливает процесс преобразования на этой строчке и не выполнять последующие за ней преобразования адреса |
R= | внешний редирект (после равно пишется адрес или цифра-статус). Если ничего не указать вылетит 302 «Временно перемещен» |
QSA | параметры ссылки ($_GET). Если его не указывать, они «потеряются» |
NC | регистронезависимо (т.е. CATEGORY и category одинаковы для правила) |
F | ошибка доступа (403 доступ запрещен) |
S= | пропустить правила (после равно количество правил) |
G | «умертвляет» URL-адрес (410 GONE) |
N | перезапускает заново правила преобразования, но уже работает с полученным в результате предыдущих действий адресом |
E= | присваивает переменным окружения значения (после равно пишут, вида переменная:значение) |
Часто встречаются такие случаи, что вскопках через запятую указано несколько флагов, например, [L,QSA] или вот еще [R=301,L]. Это не ошибка записи. Такая запись используется, когда необходимо применить несколько условий.
Флаги рассмотрели, теперь сами переменные сервера и снова таки, наиболее часто используемые
REQUEST_FILENAME (или SCRIPT_FILENAME) | полный путь к файлу или скрипту (или папке, и т.п.) соответствующему этому запросу |
REQUEST_URI | путь, который написан после имени сайта |
THE_REQUEST | строка с запросом к серверу от браузера (без заголовков браузера) |
QUERY_STRING | GET-параметры |
API_VERSION | версия API модуля APACHE |
IS_SUBREQ | содержит текст true, если запрос выполняется как подзапрос на данный момент или false в ином случае |
Что-то с теорией переборщил. Больше о переменных, флагах, буквицах можно прочесть в документации к Apache, но а мы перейдем к непосредственно к RewriteEngine.
RewriteEngine On или Off | включает On (или отключает Off) преобразования URL-адреса |
В файле .htaccess это выглядит вот так
RewriteEngine On
Теперь же самое интересное, преобразование корявой ссылки на красивый URL. Для примера возьмем образец, пускай он будет выглядеть следующим образом
http://домен/posts-$15
и попробуем его преобразовать в следующий вид
http://домен/posts-15
Чтобы сделать такую трансформацию, в файле .htaccess запишем такие выражения
RewriteEngine On
#если запрошенного файла или папки не существует
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
#регулярим)
RewriteRule ^posts-([0-9]+)/?$ /posts.php?id=$1 [L,QSA]
Ну а теперь еще к нашей ссылки добавим расширение – html
RewriteEngine On
#если запрошенного файла или папки не существует
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
#регулярим)
RewriteRule ^posts-([0-9]+).html/?$ /posts.php?id=$1 [L,QSA]
Глядишь на представленные примеры и якобы все понятно, но вот что означают эти буквицы –d и –f да и еще с восклицательным знаком впереди?
Трактовку значений этих буквиц следует начать с выражения RewriteCond, что используется для определения условий, которые способствуют выполнению правил(-а) RewriteRule. Так, в приведенном выше примере строки
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
означают, что правило будет выполнятся только в том случаи, когда такая папка или файл отсутствует. Теперь же сами буквицы
-d | проверяет путь и является ли имя файла каталогом |
-f | проверяет, является ли файлом |
-s | аналогично -f, только еще проверяет чтобы размер файла был больше нуля |
-l | проверяет, является ли путь символической ссылкой |
-F | можно сказать, «аналог» -f, но проверяет внутренне (нехило ложит сервер) |
-U | проверяет URL на существование, также отправляя внутренний подзапрос — тоже здравствуй сервер)) |
И еще, если в самом начале, перед черточкой поставить восклицательный (!) знак, то в результате получим отрицание (значение буквицы — наоборот).
На этом пожалуй и все, хотя еще нет – как добавить латынь к ссылке? Что же. И такое возможно. Здесь необходимо использовать функцию транслитерации и снова таки – сформировать строки в файле .htaccess. Вот этим мы займемся в одном из последующих постов
Если у Вас есть вопросы, жалобы или предложения по работе нашей компании, напишите нам Нам важно любое мнение. Спасибо.