Москва, Строительный проезд, 7А кор. 4 Работаем: 24/7 +7 495 744 67 74

Настройка ЧПУ — красивые ссылки на сайте

Создание красивой ссылки зависит от программного обеспечения Хостинга. Так к примеру, если работа сервера основана на Майкрософт IIS, то в таком случаи стоит использовать ISAPI_Rewrite, если же в основе работы положен Apache, то тогда придется возится с mod_rewrite. Оба эти приспособления практически одинаковые в обращении, но все же есть свои отличия. Но поскольку Хостинг у меня использует Apache – остановлюсь подробнее на mod_rewrite.

О! Модуль mod_rewrite Apache(-а) имеет могущественную силу. При помощи это модуля можно осуществить переадресацию посетителя, сделать подмену страницы, вывести страницу ошибки 404 и на этом его возможности не заканчиваются. Поскольку нам сейчас интересен вопрос создания красивой ссылки, то остановимся только на этом.

Для создания красивой ссылки нам понадобиться файл .htaccess и собственно сам модуль mod_rewrite. Если модуль, ка правило, включен по умолчанию в Apache, то вот файла .htaccess может не быть на сайте. Это не проблема. Открываем блокнот, создаем текстовый файл и помещаем его в корень нашего сайта. Затем с помощью файлового менеджера переименовываем этот файл в .htaccess

Использование mod_rewrite

Прежде чем перейти к трансформации 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. Вот этим мы займемся в одном из последующих постов


адрес

г. Москва, Строительный пр., 7Ак4

телефон

+7 495 744 67 74Круглосуточно
Яндекс.Метрика

Если у Вас есть вопросы, жалобы или предложения по работе нашей компании, напишите нам Нам важно любое мнение. Спасибо.