Htaccess — Создание ЧПУ без htaccess средствами PHP


Содержание

Пример настройки .htaccess для создания ЧПУ на php

Ниже приведен код файла .htaccess, который пригодится для создания понятных и простых ссылок на сайте. Чтобы не использовать GET запросы, и делать ссылки понятными и простыми.
Например вместо index.php?page=12&action=edit можно делать ссылки типа page/12/edit .

Пример кода файла htaccess для создания ЧПУ на php

Разберем его по частям

Устанавливаем кодировку UTF-8. Не является обязательным в данном примере:
AddDefaultCharset UTF-8

Включаем движок mod_rewrite в Apache сервере:
RewriteEngine on

Костыль, чтобы не обрабатывать второй запрос который отправляют браузеры к фавиконке сайта:
#Don’t favicon!
RewriteCond % !^favicon\.ico

Условие. Указывает что все существующие папки не будут обрабатываться регулярным выражением:
RewriteCond % !-d

Условие. Указывает что все существующие файлы не будут обрабатываться регулярным выражением:
RewriteCond % !-f

Условие. Проверяется существование этого пути и то что этот путь является символической ссылкой:
RewriteCond % !-l

Шпаргалка по .htaccess

Это не мануал, здесь собраны наиболее часто используемые настройки .htaccess, своего рода сборник подсказок.

Для чего нужен .htaccess

.htaccess позволяет создать собственную конфигурацию управлением сервера Апач в директориях или настройках хостинга.

Правила .htaccess распространяются на все директории, где расположен файл, кроме директорий, где расположен собственный .htaccess.

Файл .htaccess считывается сервером Апач при каждом обращении, поэтому все изменения входят в силу сразу, после изменения.

Глобальные настройки сервера Апач могут содержать запрет на исполнение некоторых команд, обычно это вызывает ошибку 500. Также подобную ошибку может вызывать неправильный синтаксис или ошибка, например пропуск пробела.

Запрет доступа для определенных IP-адресов или диапазонов IP-адресов

Запрет доступа с IP-адреса 123.123.123.123.

Если не указывать последние цифры адреса, то запрет будет распространяться на весь диапазон 123.123.123.0 — 123.123.123.255.

Разрешаем доступ только с определенных IP-адресов

Принудительное задание кодировки

Иногда требуется очистка кэша браузера.

Отмена перекодировки сервером

Создание собственных страниц с сообщениями об ошибках

При переходе, например, на несуществующий адрес, посетитель увидит сообщение сервера об ошибке, можно создать собственные страницы ошибок либо перенаправлять посетителя на другой адрес, как главная страница. Но для правильной индексации желательно не перенаправлять, а показывать страницу ошибки.

Строка ErrorDocument 404 http://site.ru/error/404.html указывает, что при ошибке 404 будет показан файл 404.html, который должен находиться в корне директории сайта. Если файл расположен в другой директории, измените путь к файлу или ссылке.

Редиректы

Редирект на .html

Пример, редирект с c site.ru/blog на site.ru/blog.html.

Редирект на страницу без слеша в конце адреса

Пример, редирект с c site.ru/blog/ на site.ru/blog.

Редирект на страницу со слешем в конце адреса

Редирект на страницу без index.php в адресе

Редирект на страницу без index.php в конце адреса

Редирект с www на без www

Редирект без www на www

Склейка доменов

Пример, у вас несколько доменов, но посетитель должен переправляться на один.

Редирект со старых статических url на новые

Пример редирект со страницы http://site.com.ru/ >

Защита от хотлинка

Если вы хотите запретить вставку изображений с сайта по прямой ссылке.

Вместо site.ru укажите адрес сайта, jpg|jpeg|png|gif — расширение запрещенных изображений, images.jpg – изображение которое будет показываться, если картинка находится не в корне сайта, укажите полный путь.

Защита от брутофорса

Разрешаем доступ к директории administrator только по протоколу HTTP, что отсеет некоторых ботов. Для каждой CMS нужно указать свой адрес, например wp-login, wp-admin и так далее.

Бытует легенда, что происхождения названия сервера Апач происходит не от названия индейского племени. Когда сервер был еще в самом начале пути, группа энтузиастов небольшие дополнения к коду, патчи (англ – patch), и «a patchy server» превратилось в Апач, а знаменитое перо на логотипе появилось позже.

В материале перечислены наиболее часто используемые примеры, а большинство возможностей даже не упомянуто, как модуль mod_rewrite, предоставляющий множество возможностей.

Статья писалась эпизодическими «набегами», так что если увидите ошибку, поправьте.

Руководство по настройке htaccess (переадресации, ЧПУ) для SEO

На сегодняшний день существует немало CMS систем, но лишь единицы из них имеют штатные, нужные SEO- специалисту, решения. Однако их базовые возможности весьма скудны и в полной мере не могут помочь присти сайт к оптимальному для поисковиков и пользователей виду. Установка же сторонних дополнений лишь утяжеляет движок, делая его более требовательным к железу, а обилие рекламы и сопутствующих копирайтов не идет на пользу позициям проекта в выдаче. В связи с этими обстоятельствами оптимальным выходом является ручная корректировка htaccess. Впрочем, все «по полочкам» расставлю в данной статье.

В сравнении с расширениями для CMS-систем (к примеру, плагины для WordPress), использование прямых указаний в htaccess имеет ряд неоспоримых преимуществ. Перечислим основные из них:
1. Уменьшение нагрузки на MySQL. SEO-дополнения регулярно обращаются к базе данных, так как именно там сохраняется информация о текущей конфигурации. В то же время, редиректы через htaccess функционируют на уровне сервера — их использование ощутимо повышает общую производительность проекта.
2. Работа в условиях ограниченного доступа. Файл дополнительной конфигурации позволяет задавать параметры для отдельных каталогов. Благодаря ему можно осуществлять тонкую настройку даже в том случае, если ресурс размещен на шаред-хостинге и непосредственная работа с httpd.conf невозможна.
3. Дополнительная защита. В отличие от robots.txt, директивы, прописанные в htaccess обязательны к исполнению Apache. Это обеспечивает эффективное управление индексацией, а также защиту системы от спам-ботов и сканеров.

Теперь давайте перейдем от теории к практике и начнем с наиболее известных приемов внутренней оптимизации, знакомых многим веб-мастерам.
Важное замечание: прежде, чем прибегать к описанным ниже методикам, обязательно сделайте резервную копию, особенно если ранее никогда не работали с Апачем напрямую.

Базовые возможности htaccess

Ниже приведены готовые решения насущных задач, с которыми сталкиваются практически все оптимизаторы и веб-мастера. Однако даже опытные специалисты склонны пренебрегать перечисленными рецептами, а значит, стоит еще раз вспомнить азы.

1. Страницы ошибок
При возникновении технических неполадок с хостингом или сайтом, выдается один из стандартных кодов состояния HTTP. Воспользовавшись директивой ErrorDocument, можно задать автоматическое перенаправление пользователей к соответствующим html-документам. При этом htaccess будет выглядеть следующим образом:

ErrorDocument ошибка /errors/ошибки.html

Например:
ErrorDocument 404 /errors/404.html

Наиболее распространенные ошибки:
403 — запрет на доступ к файлу/странице
404 — запрашиваемый документ/ссылка отсутствует, либо не корректный URL.
500 — внутренняя ошибка сервера.

2. Запрет просмотра для определенных User-Agent
Абсолютно каждое интернет-приложение, будь то браузер или поисковый робот, имеет особый идентификатор — User-Agent. Зная его значение, можно заблокировать нежелательные программы. В СЕО указанный прием используется для запрета индексации и защиты от различных сканеров. Также можно весьма эффективно противостоять спаммерам. Переадресация htaccess такова:

RewriteEngine on RewriteBase / RewriteCond % ^ SpamBot_1 [OR] RewriteCond % ^ SpamBot_2 RewriteRule ^.*$ — [F]

Выше мы запретили доступ к площадке условным спам-ботам 1 и 2. При попытке сканирования, будет выводиться стандартная 403 ошибка.
Примечание: указанная выше методика, несмотря на все преимущества, имеет один недостаток — требуется знать User-Agent утилиты, которую вы хотите запретить. Спамеры стараются обойти подобную защиту, оставляя его пустым, либо размещая там случайную информацию. Противодействовать вредоносным программам в этом случае можно с помощью такого кода:

RewriteEngine On RewriteCond % ^$ [OR] RewriteCond % ^.*( |’|%0A|%0D|%27|%3C|%3E|%00).* [NC,OR] RewriteCond % ^.*(HTTrack|clshttp|archiver|loader|email|nikto|miner|python).* [NC,OR] RewriteCond % ^.*(winhttp|libwww\-perl|curl|wget|harvest|scan|grab|extract).* [NC] RewriteRule ^(.*)$ — [F,L]

Запись позволяет отфильтровывать пустые и подозрительные User-Agent, а также сканеры, использующие наиболее популярные методы парсинга веб-сайтов.

3. Запрет хотлинков
Термин “хотлинк” обозначает подключение к веб-странице файла (чаще всего, изображения), расположенного на сторонних ресурсах. Мало того, что у вас, фактически, воруют контент — при этом создается еще и дополнительная нагрузка на проект. Бороться с этим можно, настроив в htaccess проверку переменной HTTP_REFERER. Если ее значение не совпадает с именем сервера, на котором размещен оригинал, изображение будет подменяться “заглушкой” (например, картинкой с вашим копирайтом):

# Проверка HTTP_REFERER RewriteEngine On RewriteCond % !^$ RewriteCond % !^http://(.+\.)?tekseo\.su/ [NC] # Замена запрашиваемого файла картинкой с копирайтом RewriteCond % !copyright\.gif$ [NC] RewriteRule \.(jpg|jpeg|gif|bmp|png)$ https://tekseo.su/images/copyright.gif [L]

4. Технические работы
Если планируются глобальные изменения (редизайн, или добавление нового функционала), возникает необходимость установки “заглушки”. Штатные средства большинства движков закрывают сайт для всех, что весьма неудобно. Однако настроенный через htaccess редирект позволяет оставить проект доступным администратору, в то же время демонстрируя посетителям страницу с информацией о технических работах:

RewriteEngine On # Вносим в исключения свой IP, а также внутренний адрес сервера. RewriteCond % !Ваш_IP RewriteCond % !127.0.0.1 # Переадресуем на заглушку хосты, переходящие куда-либо, кроме maintenance.php. RewriteRule !maintenance.php$ http://www.tekseo.su/maintenance.html [L,R=307]

5. Настройка кэширования
Время отклика сайта является пусть и второстепенным, но все же фактором ранжирования. К тому же, при высокой нагрузке неизбежно возникают проблемы с доступностью, а значит, поисковый бот не сможет адекватно проиндексировать новые страницы. Разгрузить сервер поможет правильная настройка кэширования в браузерах посетителей. Это можно сделать, добавив необходимые параметры в заголовки.

В первую очередь, стоит разобраться с файлами, которые практически никогда не изменяются (изображения, документы pdf, doc, видео):

Header set Cache-Control «max-age=29030400, private»

Здесь для файлов с перечисленными расширениями мы установили заголовок Cache-Control, задав срок хранения в 1 год через переменную max-age. Вы можете уменьшить данный интервал, однако учтите — время задается в секундах. Private указывает, что кэширование необходимо осуществлять только на стороне пользователя, минуя прокси.

Правило для скриптов, стилей, xml лучше всего прописать отдельно, снизив время до пары дней:

Header set Cache-Control «max-age=172800, private»

Динамические страницы лучше исключить из кэша вообще:

Header unset Cache-Control

Также можно задать период в 30-60 секунд (это практически не создаст проблем посетителям, однако поможет снизить нагрузку на Апач в прайм-тайм).

6. Управляем индексированием
Поисковики склонны своевольничать, не оглядываясь на инструкции robots.txt. Особенно часто этим грешит Google, способный проиндексировать даже закрытую страницу, перейдя на ресурс по внешнему линку. Частично проблема решается через мета-тег robots, вот только его можно указать лишь для html-документа. Если же от цепких лап «паука» требуется скрыть файл, стоит обратиться к htaccess, благо X-Robots-Tag поддерживает все существующие директивы индексирования:

Header set X-Robots-Tag “index, nofollow, noarchive, nosnippet”

В примере выше мы разрешили поисковым роботам индексировать файлы с расширениями .txt, .doc, pdf, тем не менее, заблокировав возможность переходить по гиперссылкам, создавать сниппеты, а также сохранять информацию в кэш.

7. Сообщаем Гуглу о мобильной версии сайта
Если веб-ресурс генерирует различный код в зависимости от устройства пользователя, с которого осуществляется просмотр, а ссылки при этом не меняются, велик риск попасть под санкции Google (такое поведение может расцениваться как попытка подмены контента). Неприятностей можно избежать, прописав строчку:

Header append Vary User-Agent

Данная запись сообщает, что содержимое страницы варьируется в зависимости от User-Agent.

Настройка постоянного редиректа

Код состояния HTTP 301 указывает на то, что запрошенный документ навсегда сменил адрес, а текущий URL следует считать устаревшим. Это позволяет не только перенести весь заработанный вес (в том числе: Траст, PR, ТИЦ), но и автоматически переправить пользователя на корректную страницу.

1. Со старого URL на новый
Самая простая переадресация htaccess может быть задана с помощью директивы Redirect, используемой модулем Apache — mod_alias. Выглядит запись таким образом:

Redirect 301 /old-page.html https://tekseo.su/new-page.html

Преимущество способа заключается в простом синтаксисе, недостаток — в том, что для перенаправления большого количества устаревших адресов, придется вручную прописывать каждый. Если же их число составляет десятки и сотни, лучше всего использовать mod_rewrite, который позволяет задавать redirect посредством регулярных выражений. Такой подход открывает широчайшие возможности для управления URL, в том числе создавать ЧПУ из автоматически сгенерированных ссылок. Для использования этого метода необходимо активировать (т.е. прописать в htaccess) не только сам модуль, но и опцию FollowSymLinks:

Options +FollowSymLinks RewriteEngine On # Размещаемый код редиректа

2. Склейка домена с www и без www
Можно сказать, что это — основы технического SEO, ведь именно данные правила помогают исключить множественные дубли контента и объединить вес входящих ссылок. Существует два различных решения, одно из которых привязано к конкретному домену, другое же является универсальным. Чем именно воспользоваться — дело вкуса. Синтаксис таков:

а) Переадресация домена с префиксом www на домен без www

RewriteCond % ^www.tekseo\.su$ [NC] RewriteRule ^(.*)$ https://tekseo.su/$1 [R=301,L]

RewriteCond % ^www\.(.*)$ [NC] RewriteRule ^(.*)$ http://%1/$1 [R=301,L]

б) Перенаправление домена без префикса www на домен с www

RewriteCond % ^tekseo\.su$ [NC] RewriteRule ^(.*)$ http://www.tekseo.su/$1 [R=301,L]

То же самое, но без привязки к домену:

Цукерберг рекомендует:  Bot - хочу научить писать игровых ботов

RewriteCond % ^(.*)$ [NC] RewriteCond % !^www\. [NC] RewriteRule ^(.*)$ http://www.%1/$1 [R=301,L]


3. Лишние слэши и тире
Весьма распространенная болезнь CMS — доступность сайта по адресам со знаком «/» на конце и без. Проблему также способен решить 301 redirect в htaccess, причем возможны два варианта:

а) Если вы желаете получить URL вида https://tekseo.su, необходимо прописать:

б) Если, напротив, требуется получить линки в формате https://tekseo.su/, то:

RewriteBase / RewriteCond % !-f RewriteCond % !(.*)/$ RewriteRule ^(.*[^/])$ $1/ [L,R=301]

Помимо этого, может наблюдаться появление лишних слэшей или тире (например, https://tekseo.su/category///page—1.html). 301 редирект в htaccess выглядит:

#Избавляемся от слэшей RewriteCond % ^(.*)//(.*)$ RewriteRule . %1/%2 [R=301,L] #Удаляем дополнительные тире RewriteCond % ^(.*)—(.*)$ RewriteRule . %1-%2 [R=301,L]

4. Избавляемся от index.php и index.html
Другая ситуация — дублирование урлов с index.php на конце. Побороть ее можно с помощью пары строчек:

RewriteCond % ^[A-Z]<3,9>\ /index\.php\ HTTP/ RewriteRule ^index\.php$ https://tekseo.su/ [R=301,L]

Выше задан redirect 301 в htaccess для homepage. Аналогичным образом можно удалить index.php для любой другой категории:

RewriteCond % ^[A-Z]<3,9>\ /category/index\.php\ HTTP/ RewriteRule ^index\.php$ https://tekseo.su/category/ [R=301,L]

5. Меняем домен
Если сайт переименован, стоит задать глобальную переадресацию. Сделаем перенаправление с tekseo.su и www.tekseo.su на http://new-tekseo.su/

RewriteCond % ^www\.tekseo\.su$ [NC] RewriteRule ^(.*)$ http://new-tekseo.su/$1 [L,R=301] RewriteCond % ^tekseo\.su$ [NC] RewriteRule ^(.*)$ http://new-tekseo.su/$1 [L,R=301]

6. Склейка доменов
При использовании алиасов, дабы исключить появление дублей, осуществляется склейка доменов. Сделать это можно посредством robots.txt, указав поисковым роботам основное зеркало, однако перенаправление является более надежным методом. Здесь задан редирект с tekseo.com и www.tekseo.com на tekseo.su:

RewriteCond % ^tekseo.com$ [OR,NC] RewriteCond % ^www.tekseo.com$ [NC] RewriteCond % !^/robots.* RewriteRule ^(.*)$ https://tekseo.su/$1 [R=301,L]

7. 301 редирект ссылки с GET-параметром на другую динамическую
Достаточно нетривиальная задача, подобная необходимость может возникнуть при обновлении модулей, или радикальной переработке структуры размещенного контента. Разберем на следующем примере — ссылку вида /?option=mod_articles&page >

Другой случай из разряда казуистики: установив SEF-модуль на свой сайт, вы можете обнаружить, что он конфликтует с некоторыми расширениями, заботливо удаляя параметры из сгенерированных урлов. Если в целом новая система полностью вас устраивает, от нее не обязательно отказываться — достаточно прописать переадресацию в htaccess, передавая часть URL в виде GET-запроса (проще говоря, подставить вопросительный знак в нужное место ссылки):

RewriteCond % ^/parametеr$ RewriteRule ^(.*)$ http://site.com/?$1 [R=301,L]

Здесь мы сделали подмену исходного статического адреса http://www.tekseo.su/parametеr на динамический http://www.tekseo.su/?parametеr.

Формирование ЧПУ на уровне сервера

Создание человекопонятных урлов — одна из ключевых задач технической оптимизации веб-ресурсов. В отличие от примеров, приведенных выше, универсального рецепта здесь не существует. Прописывание автоматических ЧПУ в htaccess требует знания регулярных выражений. В нашем случае они будут использоваться для обнаружения тех или иных фрагментов ссылок и последующей их замены/удаления с целью получения SEF-конструкций. Для грамотного их построения применяются знаки препинания и специальные символы:
“^” — циркумфлекс, начало строки;
“$” — доллар, конец строки;
“.” — точка, любой единичный символ;
“*” — звездочка, любое количество символов, расположенных после указанного знака. Самостоятельно практически не используется;
“.*” — точка и звездочка, любое число любых символов;
“+” — плюс, аналог звездочки, однако предшествующий ему символ должен присутствовать хотя бы один раз;
“?” — знак вопроса, указывает, что стоящая перед ним конструкция (будь то единственный символ или группа) может отсутствовать (например, редирект 301 в htaccess, содержащий ^/page_1/?$ будет работать независимо от того, есть на конце слэш или нет);
“()” — круглые скобки, выделяют некую последовательность (запись формата (.*) обозначает группу из любого количества случайных знаков);
“[]” — квадратные скобки, любой указанный символ (^[0-9] будет означать, что в начале строки может располагаться случайная цифра от 0 до 9);
“<>” — фигурные скобки, указывают, сколько раз встречается символ или их сочетание (так, выражение [a-z] <3>значит, что строчные буквы латинского алфавита могут встречаться три раза);
“|” — вертикальная черта, логический оператор “or” (или), задает несколько условий (например, можно перечислить вероятные расширения файлов (jpg|jpeg|gif|bmp|png));
“\” — обратный слэш, служит для экранирования служебных знаков, если они являются предметом поиска (то есть, сочетание «\.» означает, что точка — значимый символ).

Еще одна важная деталь — флаги, идущие после кода htaccess redirect и заключенные в квадратные скобки. Нас интересуют следующие:

L — останавливает преобразования адреса сразу после выполнения строчки;
R= — определяет тип редиректа, если значение не указать, сервер по умолчанию выдаст код 302 (перемещен временно);
NC — независимо от регистра, позволяет обрабатывать урлы с заглавными и строчными буквами одним и тем же правилом;
S= — указывает количество правил, которые нужно пропустить;
N — сигнализирует о необходимости перезапуска, при этом обрабатывая результат предыдущего преобразования;
F — выводит ошибку 403 (доступ запрещен).

Теперь осталась самая малость — изучить директивы, переменные окружения Apache и опции, после чего вы сможете создавать редиректы htaccess самостоятельно. Строго говоря, из директив требуется знать только две основные:
RewriteCond — посредством нее задаются условия, при которых выполняется соответствующее правило;
RewriteRule — применяется собственно для задания перенаправления.

Из всего обилия переменных окружения наиболее часто употребляются следующие:
REQUEST_FILENAME (или SCRIPT_FILENAME) — полный путь к файлу, соответствующий текущему запросу;
REQUEST_URI — путь, прописанный в HTTP-запросе;
QUERY_STRING — GET-параметры.

Опции же пригодятся такие:
-d — проверка, ведет ли заданный путь к каталогу;
-f — проверка, является ли имя файлом;
-s — действует аналогично f, однако также проверяет размер файла (он должен быть больше 0).

Для чего можно использовать приведенную выше информацию? Прежде всего, для создания следующей записи, которая должна предварять код генерации SEF:

Данная конструкция проверяет, не является ли запрос путем к файлу или каталогу. Восклицательный знак перед опциями обозначает отрицание. Если условие соблюдено, значит перед нами ссылка и она будет обработана в соответствии с правилами, прописанными в RewriteRule.

В заключении стоит разобрать еще один крайне важный момент — работу с RewriteRule. Данная директива позволяет создавать собственные переменные, что существенно упрощает работу с ЧПУ в htaccess. Для этого используются конструкции $1, $2, $3 и т.д. (а также %1, %2, %3), где цифра обозначает место расположения в строке. Но в чем же разница между $1 и %1? $1 используется для подстановки значений внутри самого правила RewriteRule, а %1 забирает таковое из условия RewriteCond.

Порядковые номера переменным присваиваются автоматически, слева направо. Иными словами, вам не придется явно их объявлять. Для большей наглядности, давайте разберем правило для создания красивого URL, включающее три переменные, а заодно применим на практике знания регулярных выражений.

Это можно сделать буквально в одну строчку:

RewriteRule ^articles/([A-Za-z0-9-]+)/(.+)/([0-9]+).html$ index.php?cat=$1&subcat=$2&page=$3 [L]

Переменные распределились таким образом:

Им соответствуют следующие регулярные выражения:
$1=([A-Za-z0-9-]+) — здесь мы указали, что последовательность может содержать цифры, заглавные и строчные буквы латиницы, а также тире;
$2=(.+) — второй блок может содержать любой символ;
$3=([0-9]+) — третий, только цифры.

Если заданные условия соблюдены, происходит подстановка соответствующего значения GET-параметра, из них и формируется SEF-линк.

Переменную %1 проиллюстрируем на примере рассмотренного выше универсального редиректа на домен без www. Здесь с помощью %1 мы подставляем значения, заданные в RewriteCond.

RewriteCond % ^www\.(.*)$ [NC] RewriteRule ^(.*)$ http://%1/$1 [R=301,L]

Еще один важный для понимания момент: файл htaccess технически не преобразует динамические ссылки в статические, а расшифровывает представленную Апачу статику, трансформируя в соответствующий динамический урл. Именно поэтому в правилах мы сперва записываем своеобразный “макет” того, что хотим получить, и лишь затем отмечаем переменными необходимые GET-запросы.

Понимание регулярных выражений дает возможность задавать редиректы через htaccess практически любой сложности. Зная синтаксис, можно создавать правила для SEF-адресов независимо от типа и особенностей системы управления контентом. Давайте же теперь разберем различные варианты подобного кода:

1. Удаление технических категорий
Исключение из ссылки ненужных элементов позволяет сократить ее длину. Многие движки создают древовидные структуры документов, добавляя в URL служебную информацию (например, “category” в WordPress). В итоге урлы становятся чересчур громоздкими, принимая вид https://tekseo.su/category/articles/page_1.html. Данную проблему можно решить с помощью специализированных плагинов, либо прописав ЧПУ в htaccess. Последнее также пригодится владельцам самописных ресурсов, не поддерживающих SEO функционал. Для указанного примера правило будет выглядеть следующим образом:

RewriteRule ^category/(.+)$ https://tekseo.su/ [R=301,L]

На выходе мы получим: https://tekseo.su/articles/page_1.html

2. Преобразование динамических ссылок в ЧПУ
Весьма плохо обстоят дела с динамическими ссылками, представляющими собой адрес исполняемого скрипта и GET-параметр, который ему передается. В этом случает исходный урл содержит знак вопроса, что осложняет процесс создания редиректа. Apache обрабатывает их следующим образом: все, что находится до “?” воспринимается как URl, все, что после — становится параметром, передаваемым скрипту. Чтобы перенаправление сработало верно, обработку нужно разбить на две части. В зависимости от местоположения знака, возможны варианты:

а). Знак вопроса находится после названия файла (например, https://tekseo.su/index.php?cat_ >

б). Если же вопросительный знак идет сразу после слэша (например, https://tekseo.su/pages/?cat_ >

Автоматизировать процесс перезаписи можно, используя переменные. Тогда конструкция становится даже более наглядной. Усложним предыдущий пример. Предположим, у нас есть ссылка https://tekseo.su/index.php?cat_ >

RewriteRule ^articles/(.+)/(.+).html index.php?cat_ >

Особое применение 301-го редиректа

В заключении разберем нестандартные варианты использования hypertext access.

1. Работа с кириллическими доменами
Специфических особенностей работы с зоной .рф не существует, но проблема в том, что htaccess не поддерживает кириллицу. Поэтому перед тем, как прописывать настройки, необходимо преобразовать имя сайта в punycode. Сделать это можно посредством специальных конвертеров, либо воспользовавшись сервисом whois.

Давайте зададим перенаправление запросов с tekseo.su на тексео.рф:

RewriteEngine on RewriteCond % ^www\.tekseo.su [NC] RewriteRule ^(.*)$ http://xn--e1aaornd.xn--p1ai /$1 [R=301,L]

2. Подмена внешней ссылки на внутреннюю
Достаточно остроумный способ, позволяющий сделать урл, ведущий на сторонний ресурс, внутренним в глазах поисковых роботов. Представим ситуацию: вы хотите поставить на своем сайте линк на профиль ВКонтакте http://vk.com/id12345. Чтобы скрыть его от глаз роботов, можно воспользоваться атрибутом nofollow, либо создать мнимую страницу “my_social”, добавив следующее:

RewriteEngine on Redirect 301 https://tekseo.su/my_social http://vk.com/vk_id12345

Формально ссылка останется внутренней, при этом пользователи ресурса ничего не заметят.

3. Редирект с прописных на строчные буквы
Одна из распространенных проблем многих CMS — появление дублей страниц, начинающихся с прописных и строчных букв (например, tekseo.su/Page1 и tekseo.su/page1). 301 редирект в htaccess способен справиться и с этой задачей, причем обработка будет происходить в автоматическом режиме и вам не придется описывать перенаправление вручную для каждого URL. Решение таково:

RewriteEngine On RewriteRule [A-Z] — [E=HASCAPS:TRUE,S=1] # Пропускаем секцию, если заглавные буквы отсутствуют. RewriteRule ![A-Z] — [S=28] # Замена букв латинского алфавита с A-Z на a-z. RewriteRule ^([^A]*)A(.*)$ $1a$2 . RewriteRule ^([^Z]*)Z(.*)$ $1z$2 # Запускаем повторный обход, если имеются еще заглавные буквы. # В конце добавляем постоянный редирект htaccess. RewriteRule [A-Z] — [N] RewriteCond % TRUE RewriteRule ^/?(.*) /$1 [R=301,L]

4. Каноничные адреса для файлов
12 февраля 2009 года Гугл аннонсировал поддержку тега rel=”canonical”. Одновременно о работе с атрибутом заявили Yahoo и Bing, а в настоящее время канонические ссылки распознают практически все крупные поисковики. С помощью него можно указать, какая из копий веб-документа является исходной, передав оригиналу значения тИЦ, PR и т.д.

Чтобы задать rel=”canonical”, его необходимо прописать внутри тега соответствующей страницы:

Но что делать, если вы хотите сделать каноничным файл? Это может понадобиться в том случае, если проект поддерживает автоматическое создание pdf-документов. Вместо того, чтобы запрещать их индексирование, воспользуемся следующей конструкцией:

Header add Link ‘ ; rel=”canonical”‘

А регулярные выражения позволят указать в htaccess канонические версии сразу для всех файлов:

RewriteRule ([^/]+).pdf$ – [E=FILENAME:$1] Header add Link ‘ ; rel=”canonical”‘

5. Запрещаем воровство статей ВКонтакте
В процессе борьбы с дублями контента вы можете обнаружить ссылки такого вида: http://www.tekseo.su/page-name.html&post=-123_456. Эта проблема связана с наличием плагина социальных сетей, а именно — кнопкой ВКонтакте. Когда кто-либо решает поделиться очередной статьей на стене, в паблике или группе, автоматически генерируется подобный адрес. И все бы ничего, но такие урлы «на ура» индексируются поисковиком Google. Чтобы это предотвратить, достаточно добавить в htaccess следующее:

RewriteEngine On RewriteCond % ^(.*)\&post= RewriteRule ^(.*)\&post=(.*)$ $1 [R=301,L]

Как видно, потенциал hypertext access чрезвычайно высок. Его грамотное использование позволяет решать абсолютное большинство задач технической оптимизации, используя нативные модули сервера. Что немаловажно, благодаря этому можно отказаться от программных “костылей”, получая дополнительные выгоды, в числе которых повышение производительности и защищенности курируемого проекта.

ЧПУ своими руками — как сделать SEF ссылки?

Здравствуйте дорогие гости и постоянные читатели блога о создании сайтов – Site on! В одной из предыдущих статей этого раздела я обещал вам рассказать, как всего за пару минут можно создать собственные ЧПУ ссылки. Несмотря на то, что статья может показаться вам объёмной, а для некоторых и сложной – я надеюсь, когда дочитаете её до конца, вы согласитесь, что в создании ЧПУ действительно нет ничего сверхъестественного.

Что такое ЧПУ?

ЧПУ – это исковерканная англоязычная аббревиатура SEF URL (search engines friendly url). Она обозначает адреса ссылок, которые дружелюбны для поисковых систем. О ЧПУ я также писал в статье про внутреннюю оптимизацию сайта. В русскоязычном варианте SEF URL пишется как ЧПУ – человеко-понятные url. Что всё это значит? Это значит, что адреса ваших ссылок будут иметь осознанный текст, а не технический мусор, за примером можете сходить по ссылке выше.

Какие преимущества дают SEF URL?

Во-первых, очевидно, что ЧПУ ссылки уже в самом своём адресе могут содержать полезную для пользователя информацию. Из такого адреса сразу понятно, о чём будет статья или страница в целом.

Во-вторых, SEO. Такие ссылки приветствуются поисковыми системам, пару лет назад они могли бы дать вам значительный перевес над конкурентами. Сегодня подобные ссылки являются само собой разумеющимися, сейчас редко встретишь сайты с не ЧПУ ссылками, однако они до сих пор есть.

В-третьих, это престиж. Когда я захожу на сайты, где вместо понятного и красивого адреса в ссылках содержится разного рода мусор, а то и засекреченная информация – я задаюсь вопросом: «Вроде бы приличный сайт, но почему разработчики не сделали ЧПУ? Неужели это было так сложно? Может им настолько нет дела до подобных вещей или просто не хватает знаний и навыков?». В общем, для меня такие сайты большая загадка.

Цукерберг рекомендует:  Как я выучилась на маркетолога в Испании после университета

В-четвёртых, безопасность. Сайты с ЧПУ ссылками не содержат в своём адресе техническую информацию переданную методом GET (уроки PHP), которую можно запросто использовать для взлома сайта.

И последнее: ЧПУ – как средство навигации. Если ссылка понятна пользователю, то он сам может переходить по разделам сайта, просто редактируя ваш URL. Например:

Если удалить из данной ссылки её последнюю часть (2-sublime-text-2), то мы попадём в раздел, к которому относится данная статья:

В данном случае это раздел «Инструменты». То есть благодаря SEF ссылкам мы можем построить понятную людям и роботам иерархию нашего сайта, что опять-таки будет полезно и для посетителей и для продвижения в поисковых системах.

Недостатки ЧПУ ссылок

Первое: возможно, вам придётся повозиться и даже помучаться, чтобы их настроить или вовсе сделать с нуля.

Второе: ваш сайт станет дольше грузится, а именно, на пару десятитысячных секунды :) Это связано с тем, что для работы ЧПУ подключается специальный модуль веб-сервера Apache – mod_rewrite, которому понадобится это «огромное» количество времени на обработку ссылок.

Когда ЧПУ не нужны?

ЧПУ ссылки могут быть и лишними, например, если у вас закрытый корпоративный портал, где вся работа осуществляется только авторизованными пользователями, а для всех остальных, в том числе и для поисковых роботов доступ закрыт.

Также ЧПУ будет излишеством в back-end вашего сайта, то есть в панели администратора.

Что ещё нужно знать о ЧПУ?

Во всех актуальных версиях CMS данная проблема уже решена. Всё что вам нужно, чтобы сделать ЧПУ ссылки, это лишь включить соответствующие настройки в движке вашего сайта.

Но что если мы имеем дело с сайтом на чистом PHP, без CMS, или же хотим разработать свою собственную CMS в которой хотим сделать SEF URL? Для подобных случаев, а также для людей, которые хотят углубиться и понять всю суть преобразований обычной ссылки в ЧПУ, я и написал остальную часть статьи. Если вы читали мои предыдущие статьи, то знаете, что мой блог как раз относится к этой категории, то есть сайтам, написанным с нуля на PHP, без использования готовых CMS.

Ах да, ещё один момент: из личного опыта не советую делать кириллических URL.

Коротко: в чём вся суть?

Пишу для тех, кто совсем не в курсе дел. Везде в наших тегах гиперссылки мы будем указывать ЧПУ адреса:

Суть в том, чтобы из красивого и понятного человеку URL (ЧПУ) сделать на лету URL, который будет полезен разработчику PHP (не ЧПУ):

При этом всем на свете (посетителям, поисковым системам, всем) будет видна именно ЧПУ ссылка, но мы как разработчики PHP будем знать, что таит в себе URL на самом деле. В конце статьи, для полного понимания, я покажу все этапы, как ЧПУ работают у меня на блоге.

Создание SEF ссылок с помощью mod_rewrite

mod_rewrite – это модуль веб-сервера Apache, предназначенный для перезаписи URL. Естественно, для начала работы вы должны включить этот модуль в настройках Apache, эти настройки находятся в файле httpd.conf, вам нужно будет раскомментировать строку с именем данного модуля. У 99% хостинг-провайдеров он включён, за исключением совсем ужасных хостингов. Кстати говоря, используя Denwer, у меня не получилось нормально настроить собственные ЧПУ, мне не захотелось долго искать в чём именно проблема (мешают собственные редиректы Денвера) и я установил Апач отдельно. Для тех, кто не знает, как установить сервер Апач не используя Денвер, я напишу инструкцию в одной из будущих статей. А здесь мы продолжаем разбирать наши ЧПУ.

Все наши правила преобразований URL записываются в небезызвестный файл .htaccess, который должен лежать в корне нашего сайта.

Для корректной работы mod_rewrite в нём обязательно должна быть написана следующая строка:

Далее подключаем наш модуль rewrite к конкретной папке, то есть к папке, в которой лежит наш .htaccess:


Имеем следующий файл .htaccess:

Правила и условия mod_rewrite

Все правила записываются с помощью команды RewriteRule, после которой ставится пробел и записывается шаблон ваших ЧПУ с помощью регулярных выражений, далее ставится ещё один пробел и указывается строка, в которую мы хотим преобразовать данный шаблон, где $1,$2,…$n – наши переменные. Более подробно о регулярных выражениях вы можете узнать по приведённой выше ссылке, а также далее в данной статье. Давайте рассмотрим пример:

Где ^useful/([a-z]*) – это шаблон ожидаемого url,

а /index.php?category=useful&article=$1 – это то, во что мы его конвертируем, если пришедший URL подошёл под шаблон.

При этом $1 равен тому, что написано в круглых скобках, то есть $1 = [a-z]* Если бы круглые скобки встречались 2 раза, то у нас были бы переменная $1 и $2, если круглые скобки встречаются 3 раза, то переменные $1, $2, $3 и так далее. При этом переменные создаются в том же порядке, как идут круглые скобочки.

Понятно? – молодцы. Непонятно? — идёмте дальше, мы ещё к этому вернёмся. Также хочу обратить ваше внимание на то, что для лучшего понимания статьи, вы уже должны обладать начальными знаниями о PHP, а также о работе с методами GET и POST. Продолжаем.

Для того чтобы наш обработчик, то есть mod_rewrite не срабатывал каждый раз без надобности, мы в RewriteRule указываем шаблон, которому должны соответствовать приходящие URL. Если URL не соответствует шаблону, то mod_rewrite просто не сработает и не преобразует пришедший SEF URL в URL, с которым мы можем работать.

То есть на данном этапе вам важно понять саму суть: в ЧПУ ссылках не передаются параметры, а без параметров мы не можем ничего сделать в PHP с этой ссылкой, поэтому с помощью mod_rewrite мы преобразуем ЧПУ ссылку без параметров в не ЧПУ ссылку с параметрами. Что такое параметры? В примере выше имеем 2 параметра:

Параметр category и параметр article.

Опять-таки обращаю ваше внимание, что про параметры вы уже должны были знать, я лишь вкратце вам напомнил.

В шаблонах мы можем использовать символы и символьные классы. Символ точки обозначает абсолютно любой символ.

  • . – любой одиночный символ
  • [redf] – это класс символов. Обозначает наличие одного из перечисленных символов с учётом регистра.
  • [a-z] – класс символов. Обозначает наличие одного из символов в промежутки от a до z, то есть весь английский алфавит.
  • [a-zA-Z] – то же самое, только без учёта регистра, то есть весь алфавит, включая и большие и маленькие буквы.
  • Можно и с цифрами: [0-9]
  • Естественно, всё можно комбинировать: [a-zA-Z0-9]
  • [^rewfad] – класс символов, но со знаком ^ внутри квадратных скобочек обозначает, что шаблон НЕ должен содержать данных символов.
  • site|cite – обозначает альтернативу: подходит site или cite.

Квантификаторы или кванторы

Все предыдущие примеры обозначали один символ (одну единицу), а что если мы хотим показать, что символов из этого промежутка [a-zA-Z] может быть не один, а сколько угодно. Для этого мы должны использовать квантификаторы:

  • ? — 0 или 1 символ из предшествующего текста (класса символов, символа и тд.)
  • * — 0 или любое количество символов из предшествующего текста (n>0)
  • + — 1 или любое количество символов из предшествующего текста (n>1)
  • — ровно n символов, где n – конкретное число.
  • — должно быть ровно 4 символа из предшествующего текста.
  • — 4 или 5 символов
  • — от нуля до 6 символов
  • — от 4 до бесконечности символов

Примером может послужить наша уже известная строчка:

В которой мы применили квантификатор (квантор) звёздочку (*) после класса символов [a-z]. Это значит, что в нашем URL после useful/ могут находиться символы от a до z в любом количестве и, естественно, в любой последовательности, а могут и не быть вовсе. Домен в счёт не берём, он подразумевается сам по себе.

Экранирование

Также при составлении шаблона не стоит забывать и про экранирование. Если вы хотите заключить в класс символов, например, символ точки, то вам нужно её заэкранировать, так как без экранирования точка (служебный символ) обозначает абсолютно любой символ:

Тоже самое касается и квадратных скобочек, они у нас обозначают класс символов, поэтому если в вашем url могут быть квадратные скобочки их нужно заэкранировать:

Ограничение начала и конца строки (маркеры)

Для того чтобы указать начало или конец строки, без учёта домена, используются символы:

  • ^ — начало URL
  • $ — конец URL

То есть в нашем первом примере мы указали, что наш шаблон начинается именно с начала URL, а не откуда угодно (с середины, с конца):

Обращаю ваше внимание на то, что знак ^ внутри квадратных скобок обозначает отрицание, не путайте!

Обратные связи в mod_rewrite

$n – это наша «переменная» в круглых скобках, о них мы уже говорили. Работает для RewriteRule.

%n – то же самое, только в RewriteCond. RewriteCond мы ещё не рассматривали, он у нас впереди.

Итак, если RewriteRule – это наши правила преобразования URL, то RewriteCond – это условие, аналог if в PHP. RewriteCond нужно в ситуациях, когда вам необходимо выполнить URL преобразование (RewriteRule) только при выполнении какого-то условия.

У сервера есть свои собственные переменные, которые мы можем использовать в наших условиях RewriteCond:

Синтаксис применения серверных переменных таков:

Давайте составим наше первое условие:

Если посетитель зашёл с браузера Mozilla Firefox, то выполняем следующее правило. Как видите, в отличие от PHP мы не используем фигурные скобки для обрамления нашего правила, которое выполнится, если условие TRUE.

RewriteCond позволяет использовать операторы сравнения: (больше), = (равно). Также есть специальные значения, например:

  • -d (является ли каталогом)
  • -f (является ли файлом)
  • -s (является ли файлом с ненулевым размером)
  • ! – отрицание.

Флаги

  • nocase|NC – можно писать либо nocase, либо NC, это одно и то же, обозначает регистро-независмость. То есть мы можем больше не писать:

Вместо этого написать так:

  • ornext|OR – если это, либо следующее условие TRUE, то выполняем RewriteRule. Пример:
  • Last|L – последнее правило. Если правило применилось, то правила, расположенные ниже по коду, не сработают.
  • next|N – некий аналог continue. Если правило применилось, заставляет отыгрывать все правила с самого начала, но при этом с уже преобразованной строкой.
  • redirect|R – редирект. По умолчанию 302. Можно указать другой код редиректа, например:

    forb > Если нужно поставить одновременно несколько флагов, ставим их через запятую, например:

    Как вы уже могли догадаться, mod_rewrite можно использовать не только для ЧПУ, но и для многих других интересный целей, например, клоакинга – это метод чёрного SEO, когда по одному и тому же адресу посетителям отдаётся одна страница, а поисковым роботам совершенно другая. Ну и под конец статьи, я покажу вам живой пример использования всего написанного выше и как же это всё работает взаимодействуя с нашим PHP.

    Живой пример использования mod_rewrite

    Итак, вот какой вид имеет мой файл .htaccess:

    Что происходит в этом ужасе? Для начала я проверяю, не набрал ли человек старой закалки мой адрес с www, если набрал, то перенаправляю его на тот же адрес, только без www. Зачем именно это нужно я напишу в одной из следующих статей, если коротко, то для SEO. После перенаправления с www на без www у нас заново считался наш файл .htaccess, поэтому всё начинается снова: проверяем, не пришёл ли нам УРЛ с www, в этот раз — нет. Далее (второй RewriteCond) мы проверяем, если наш УРЛ действительно без www, то делаем преобразования, а именно: заносим весь URL (без имени домена) в параметр article.

    На этом работа .htaccess завершена и на сцену выходит PHP. Следующий код размещён в index.php:

    О том, как работает конструкция switch, я подробно писал в статье по указанной ссылке. Вот и всё, дамы и господа! Наконец-то наша статья подошла к логическому завершению, и теперь вы сможете попрактиковать полученные знания. Я прощаюсь с вами до выхода новой статьи, а напоследок хочу привести интересную цитату:

    «Несмотря на тонны примеров и документацию, mod_rewrite это Вуду. Чертовски клёвый Вуду, но все-таки Вуду.»

    htaccess

    Что такое .htaccess?

    Файл .htaccess (англ. hypertext access) используется для простой и удобной настройки веб-сервера на котором хранится сайт пользователя. Соответственно меняя настройку веб-сервера, мы сможем поменять работу сайта. Как правило, файл .htaccess находится в корневом каталоге, а его действие распространяется на весь сайт и на все подкаталоги. Если же в другом каталоге содержится свой .htaccess, то он будет действовать только на свой каталог и подкаталоги.

    Важно! Изменяя файл .htaccess можно очень нарушить работу сайта, а также необдуманные действия с ним могут не иметь видимых последствий, но повлечь за собой снижение позиций в поисковых системах, либо полную их потерю. Поэтому мы рекомендуем перед любыми изменениями файла сохранять его копию, чтобы иметь возможность вернуть прежние настройки.

    Где находиться файл .htaccess?

    Обычно он располагается в коневом каталоге сайта. Иногда, в различных CMS может находится файл htaccess.txt, который никак не воспринимается сервером и ни на что не влияет. Чтобы он начал работать нужно его переименовать в .htaccess. Если это не получится сделать на вашем компьютере, то зайдите на свой сервер через FTP-клиент, и переименуйте файл прямо сервере.

    Редактировать файл на компьютере можно с помощью любого текстового редактора, но чтобы избежать возможных проблем с кодировкой мы рекомендуем использовать для этого Notepad++.

    Как проверить работает ли .htaccess?

    Все просто, напишите в первой строчке этого файла любое слово (например YAROBOT), сохраните файл и замените им находящийся на сервере. Если сайт продолжит работать, то .htaccess в данный момент не работает. Если же появится ошибка 500 Internal Server Error, то это значит, что веб-сервер не смог понять команду (YAROBOT) и выдал ошибку. Этот факт подтвердит, что работа .htaccess на сервере поддерживается и включена в данный момент. Чтобы вернуть сайту работоспособность удалите строчку с YAROBOT.

    Далее мы поговорим о всем полезном, что можно сделать с помощью данного файла.

    Правильный 301 редирект через файл .htaccess

    Важно! Если вы хотите, чтобы ваш редирект работал, нужно перед строками, которые рекомендуются ниже по тексту, обязательно прописать

    301 Редирект с одной страницы на другую (или сайт)

    Для этого в файл .htaccess вносим следующие строки:

    Redirect 301 /старая-страница.html http://сайт.рф/новая-страница.html

    RedirectPermanent /старая-страница.html http://сайт.рф/новая-страница.html

    301 Редирект с www-сайта на сайт без www

    Например перенаправление с http://www.site.com на http://site.com. Это очень полезная вещь, часто используется в СЕО

    Options +FollowSymLinks
    RewriteEngine On
    RewriteCond % ^www.domain\.com$ [NC]
    RewriteRule ^(.*)$ http://domain.com/$1 [R=301,L]

    Обратный редирект с домена без www на домен с www

    Перенаправление с http://site.com на http://www.site.com (не советуем использовать)

    Options +FollowSymLinks
    RewriteEngine On
    RewriteCond % ^domain\.com$ [NC]
    RewriteRule ^(.*)$ http://www.domain.com/$1 [R=301,L]

    Редирект всех посетителей со старого сайта на новый

    Как добавить .html в конце URL?

    Чтобы при вводе site.com/page или site.com/page/ происходило перенаправление на site.com/page.html пишем в .htaccess следующее:

    Как убрать .html в конце URL?

    Обратный редирект с site.com/page.html на site.com/page

    Как убрать слэш в конце URL?

    Например было site.com/page/, стало site.com/page

    301 Редирект с одного раздела на другой?

    Перенаправление всех страниц одного раздела site.com/razdel-1/razdel-2/page на на страницы другого раздела site.com/razdel-1/page

    RewriteRule ^blog/raznoe/(.*)$ http://site.ru/blog/$1 [R=permanent,L]

    301 Редирект при переезде со старого домена на новый

    Следующее правило корректно перенаправит посетителей с каждой конкретной страницы старого сайта на такую же страницу на новом сайте. Например со страницы oldsite.com/page на newsite.com/page

    RewriteCond % ^www.oldsite.com$ [NC,OR]
    RewriteCond % ^test.oldsite.com$ [NC]
    RewriteRule ^(.*)$ http://newsite.com/$1 [R=301,L]


    Правильное изменение страниц ошибок через .htaccess

    Когда пользователь хочет увидеть сайт (отправляет запрос на сервер хостера), то сервер возвращает ему ответ с кодом. Коды 1-399 свидетельствуют о нормальной работе сервера, а коды 400-599 сообщают об ошибке сервера (коды всех ошибок смотрите в спец. статье). Например, если сервер с вашим сайтом перегружен, или у него происходит перезагрузка, то пользователь увидит непонятный ему текст (например, 500 Internal Server Error), подумает, что сайт больше не будет работать и больше никогда на него не вернется. Чтобы вместо стандартной страницы ошибки (непонятно для пользователя) показать ему вашу отдельную страницу, на которой будет например, сообщение о том, что сайт временно не работает, но позже восстановит свою работу и на него обязательно стоит вернуться (сайт КиноПоиск при перегрузки серверов выдает сообщение «Матрица перезагружается. » и соответствующую картинку). Наиболее распространенным решением является составление собственной страницы вместо стандартной 404-ошибки. Эта ошибка показывается пользователю, если введен адрес несуществующей страницы. Думающие вебмастеры, создают свою страницу вместо непонятной стандартной, на которой пишут, что человек перешел по несуществующей ссылке и предлагают поискать нужную информацию на сайте, а не уйти с него. Пример нашей 404-страницы можно увидеть здесь. Чтобы показывать пользователям свою страницу ошибки вместо стандартной, нужно создать отдельную страницу (например http://yoursite.com/404.html) и добавить соответствующий код в файл .htaccess Вот примеры кода, который нужно добавить:

    ErrorDocument 400 http://yoursite.com/400.html
    ErrorDocument 404 http://yoursite.com/404.html
    ErrorDocument 500 http://yoursite.com/500.html

    Если вы хотите подставить другую страницу вместо ошибки 403, то нужно указывать еще текстовое сообщение, которое будет показано, например:

    ErrorDocument 403 «Sorry can’t allow you access today, see you later alligator :)»

    Настройки безопасности сайта через файл .htaccess

    Файл .htaccess дает большие возможности для улучшения безопасности сайта. Наиболее популярные мы сейчас перечислим:

    Защита сайта от скриптовых инъекций

    #Включает отслеживание сим-ссылок
    Options +FollowSymLinks
    #Запускает url_rewriting
    RewriteEngine On
    #Блокирует все ссылки, содержащие

    Как перенаправлять все запросы на index.php (.htaccess)?

    Нужно, чтобы все запросы, которые приходят на сайт, перенаправлялись на index.php

    Все после www.site.com/ попадает в $_GET[‘route’]

    чтото ты делаешь не так
    создал новый хост с такой структурой папок

    содержимое файлов
    .htaccess
    RewriteEngine On
    RewriteRule ^.*$ index.php [NC,L]

    если удалить папку и создать файл, то точно также — все идет в index.php

    Если у вас не работает, то может быть несколько возможных проблем
    1. У вас там точно стоит апачи? не nginx+php-fm?
    2. Если все-таки стоит апачи, перед ним нет прокси (nginx) — если да, то запрос может перехватывать nginx — 404 ошибку кто сообщает (внизу обычно пишется сигнатура веб-сервера — 404 точно апачи отдает?)
    3. Может у вас не включен модуль mod_rewrite. Как проверить? создать файл php c содержимым

    в листинге в секции «apache2handler» напротив графы «Loaded Modules» должен присутствовать «mod_rewrite»
    4. Файл .htacces у вас точно такой же как я написал, потому что тот файл что привел @Satanpit , не отвечает требованиям вашей задачи
    Логика его файла такая
    (включить реврайт)
    RewriteEngine On
    (Если uri не является папкой)
    RewriteCond % !-d
    (Если uri не является файлом)
    RewriteCond % !-f
    (Перенаправить на index.php)
    RewriteRule ^(.*)$ ./index.php?route=$1

    Логика моего же файла такая
    (включить реврайт)
    RewriteEngine On
    (перенаправить на /index.php и сделать правило финальным (остальные правила будут отброшены))
    RewriteRule ^.*$ index.php [NC,L]

    5. Что прописано в конфиге домена по поводу правил обработки файлов .htaccess?
    в секции

    AllowOverride All есть?
    — по умолчанию обычно там стоит
    AllowOveride None

    Пишем ЧПУ и редиректы

    Столкнулись с необходимостью написания ЧПУ в одном из проектов и делимся опытом по этому поводу.

    • Сервер под управление Apache;
    • Скрипт, который выдает разный контент исходя из GET параметров;
    • Ссылки вида http://site.com/?page=contacts нужно привести к http://site.com/contacts/ ;
    • Необходимо прописать переадресацию со старых адресов на новые.

    Все находится в файле .htaccess . Все подробно комментировано.

    Статья про регулярные выражения уже была, подробно останавливаться на этом нет смысла.

    «Волшебство» преобразований происходит благодаря флагу QSA (query string append), указанному в квадратных скобках после каждого правила. Если строка запроса удовлетворяет правилу, то она является эквивалентом указанного адреса, и выдает тот же самый контент.

    Например, RewriteRule ^news/?$ ?page=news [L,QSA] и обратиться к сайту по адресу /news/ , то:

    1. Строка запроса /news/ совпадет с указанным в правиле, значит это правило сработает;
    2. Флаг L (last) указывает, что после этого правила другие применяться не будут;
    3. Флаг QSA указывает на подстановку строки запроса и её НЕ ЧПУ аналог;
    4. Строка запроса /news/ аналогична НЕ ЧПУ адресу ?page=news ;
    5. По запросу /news/ выводится контент точно такой же, как и если набрать ?page=news .

    После этого остается написать редиректы с 301 кодом (постоянный редирект), чтобы случайно не получить дубли страниц в поиске.

    Редиректы

    Переадресацию прописать можно несколькими способами.

    С первыми двумя все ясно. Старый адрес, потом новый. Если писать не Redirect , а RewriteRule , то нужно еще указать флаг R и код редиректа.

    Третий вариант перенаправляет по новому адресу по различным GET-параметрам.

    RewriteCond определяет условие сработает правило RewriteRule .

    • REQUEST_URI — Адрес, по которому осуществляется запрос;
    • QUERY_STRING — Строка с GET-параметрами.

    Если оба этих условия совпадают, то срабатывает правило, по которому с указанного адреса посетителя сайта переадресуют на указанный новый.

    Представленные примеры позволяют подготовить самописный сайт без ЧПУ к продвижению в поиске.

    Как сделать ЧПУ для сайта

    (Человеко-Понятные Урлы) или SEF (англ. Search Engines Friendly url). Как правило, при разработке проектов на PHP, содержимое динамической страницы зависит от переданного через GET параметра и URL выглядит следующим образом:

    в данной случае намного аккуратнее смотрелась бы ссылка вида:

    Как это сделать? Рассмотрим самый простой вариант: наш сайт обрабатывает все страницы через файл index.php и содержимое страницы определяется только одной переменной – >

    1) Определяем существует ли запрашиваемый путь в реальности. Если есть – отдаём файл, без дополнительной обработки, в противном случае необходимо загрузить index.php, который обработает несуществующий ЧПУ. Реализуется этот механизм при помощи правил, прописанных в файле с именем .htaccess.

    Файл .htaccess должен находиться в корневой директории. Создать и править.htaccess можно в обычном текстовом редакторе.

    Содержимое файла .htaccess:

    RewriteEngine On – разрешаем серверу преобразовывать URL.

    RewriteBase / – устанавливаем базовый URL.

    RewriteCond % !-f – проверяем, что запрошенной директории не существует.

    RewriteCond % !-d – проверяем, что запрошенного файла не существует.

    RewriteRule . /index.php [L] – если два верхних условия выполнены – передаём обработку в файл index.php

    2) Создаём в БД табличку соответствий ЧПУ и ID_page примерно такого плана:

    SEF ID_page
    varchar(255) int(11)
    index 1
    page 2
    page-name 3

    3) Содержимое файла index.php, из комментариев в коде ясно, как это работает.

    Нам будет приятно

    Еще интересное в блоге

    Создание ZIP архива

    Защита от спама без капчи

    Будем рады работать именно с вами

    Политика конфиденциальности персональных данных

    .htaccess и настройка ЧПУ

    .htaccess и настройка ЧПУ | Хостинг сайтов. Качественный виртуальный хостинг сайтов

    Работа с ISPmanager

    Работа с биллингом

    Работа с сайтами

    Немного о доменах

    Способы оплаты хостинга

    Работа с различными CMS

    Еще на платном виртуальном хостинге trust-host.ru

    Для того, чтобы работали «красивые ссылки» ЧПУ (человеко понятный урл) необходимо наличие соответствующих правил в файле .htaccess

    Создаете файл .htaccess (точка впереди обязательна), вставляете в него ниже предложенный код и закачиваете этот файл в корневую папку вашего домена.

    Код, если у вас WP находится в корне папки домена

    Пример разбора урла с спецсимволами «text?text=text&text» и дальнейшим его преобразованием к красивому ЧПУ.

    Полная поддержка директив .htaccess прилагается.

    Пролонгации домена 199-00 руб

    Меня часто просят написать какой-нибудь «элементарный» ЧПУ, редирект на *.html, переадресация в папку, ЧПУ с красивыми урлами, как убрать часть URL-а, сделать передачу url в php.

    Но к сожалению я сейчас достаточно редко бываю свободен, и плюс несколько отошел от программирования, по кране мере мне так кажется.. Но облегчить посетителям жизнь и разобрать конкретно один из примеров очень хотелось. И тут подвернулась отличная статья Горчакова Александра http://gor4akov.ru/post_1369121880.html разъясняющая массу самых сложных в понимании нюансов в условиях, и правилах преобразований. Ее копия ниже:

    Мы, как веб программисты, часто сталкиваемся с файлом .htaccess и в частности с его модулем MOD_REWRITE и синтаксисом RewriteRule. И по началу трудно разобраться и понять принцип его работы, правила по которым он работает и механизм преобразования динамических ссылок в статические и наоборот. В этой статье я постараюсь максимально просто, максимально доступно, с объяснениями и примерами растолковать так, что бы у Вас не осталось каких либо вопросов.

    За преобразование динамических ссылок в статические отвечает модуль mod_rewrite с синтаксисом RewriteRule, принцип работы и правило преобразования, которого я и буду объяснять.

    Для примера возьмем динамическую ссылку, которую нам надо преобразовать:

    В файле .htaccess, который мы разместим в корневой папке каталога catalog/ записываем (файл .htaccess действует только на каталог где он расположен и на его дочерние каталоги):

    Давайте подробней разберемся, что здесь написано:
    ✍ ^ Начало строки;
    ✍ ([A-Za-z0-9-]+) Скобки создают переменную, которую подставляем в динамическую ссылку $1. То есть
    ✍ Переменная $1 = ([A-Za-z0-9-]+)
    ✍ Переменная $2 = ([^/]+)
    ✍ Переменная $3 = (.*)
    ✍ Переменная $4 = ([0-9]+)
    ✍ В скобках [A-Za-z0-9-] класс допустимых символов. В данном случае допустимыми символами являются A B C D…Z a b c…z 0 1 2 3…9 – Если мы хотим добавить символы, например, ? ; : то получим следующее [A-Za-z0-9-?;:] то есть просто дописали их.
    ✍ + означает что мы добавляем еще один символ для подстановки.
    ✍ Выражение ([^/]+) означает любой символ кроме(^ означает кроме) слеша назад. + означает добавить еще символ.
    ✍ Выражение (.*) Точка означает любой единичный символ, * означает как и плюс – добавить еще символ.
    ✍ Выражение ([0-9]+) думаю, тут понятно.
    .html – означает что статическая строка оканчивается на .html
    ✍ Слеши / означают слеши в статической ссылке.

    Следует отметить, что данный мод преобразовывает ссылки не с динамической в статические ссылки а НАОБОРОТ! То есть, на сайте мы пишем статические ссылки, а мод рерайт преобразовывает статическую ссылку с сайта на динамическую. То есть представленную выше ссылку мы должны записать на сайте в виде статической:

    На выходе получается ссылка:

    Так же к выше изложенному правилу преобразования следует добавить правила для ссылки без переменной номера страницы page, а так же возможных вариантов с отсутствием переменных.

    Ниже приведу возможные обозначения и символы используемые в модуле MOD_REWRITE:
    . Любой одиночный символ. Если нам в круглых скобках нужна именно точка а не любой одиночный символ ее нужно экранировать . Обратный слеш экранирует какой либо символ [ ] ( ) ? > и т.п. и передает его истинное значение.
    [chars] Класс симвлолв: Один из символов например [A-Za-z0-9] <2,5>— фигурные скобки означают диапозон количества символов, в данном случае допускается от 2 до 5 символов.
    [^chars] Класс симвлолв: Ни один из символов. [^fg57] – символы f g 5 7 запрещены.
    text1|text2 Альтернатива: text1 или text2. например [a|b|c] означает или a или b или c

    Кванторы (символы для обозначения количественных отношений):
    ? 0 или 1 из предшествующего текста Означает либо есть символ или какое-то значение символов или их может не быть.
    * 0 или N из предшествующего текста (N > 0)
    + 1 или N из предшествующего текста (N > 1)
    макрос «$1» обозначает ту часть исходного пути, которая расположена внутри первой пары скобок «RewriteRule ^(.*). » , $2 – внутри второй пары и так далее.

    Маркеры:
    ^ Маркер начала строки
    $ Маркер конца строки

    Пример RewriteRule с пояснениями:

    Допустим, у нас на сайте есть статьи, которые имеют динамические страницы:

    Сделаем, чтобы ссылка на наши статьи была более красива, например:

    Для этого, в нашей MySQL таблице, добавляем дополнительную строку, в которой будем хранить уникальное название статьи латинскими буквами без пробелов, слешов и специальных символов, недопустимых в ссылках. Например: Moya-pervaya-statya ну и по такому принципу. Назавем строку в нашей таблице, например eng_name_stati

    Динамическая ссылка теперь будет иметь вид:

    Главный момент, который нужно понять, файл .htaccess, как я говорил выше, не преобразует динамические ссылки в статические, а наоборот, статические преобразовывает в динамические.

    Правило преобразования RewriteRule будет иметь вид:

    Бывает так, нужно сначала проверить, не является ли это ссылка на существующий файл на нашем сервере, например /catalog/webmaster/index.html может оказаться существующим файлом, но если эта ссылка попадет под соответствующее правило RewriteRule она согласно этому правилу преобразуется. Поэтому, если нам сначала нужно проверить, не является ли этот файл или директория прямая, нужно пред правилом RewriteRule написать условие если:

    Выглядеть это будет так:

    Где, RewriteCond – условие если, % – полный системный путь к запрашиваемому файлу или директории, Восклицательный знак ! означает отрицание не, -d – дериктория, -f – файл.

    Теперь, прежде чем применить правило RewriteRule, будет проверено условие RewriteCond

  • Понравилась статья? Поделиться с друзьями:
    Все языки программирования для начинающих