Примените магию с помощью mod_rewrite в htaccess | ВесьТоп создание и продвижение сайтов

Поддержка сайта

Высокие позиции в поисковой системе, на прямую зависят от развития вашего сайта.

Продвижение сайтов

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

Создание сайтов

Мы делаем сайты быстро, недорого и профессионально. От работы с нами, у вас останутся только положительные эмоции.

Примените магию с помощью mod_rewrite в htaccess

Примените магию с помощью mod_rewrite в htaccess

Переписать интернет-адреса с помощью .htaccess

Смена интернет-адресов с помощью mod_rewrite выполняется в основном по следующим причинам SEO:

  • сокращение адресов: адреса становятся индексируемыми поисковыми системами (поисковая оптимизация) и их легко вводить вручную в браузере
  • перенаправлять старые адреса на новые при переименовании страниц
  • если есть страницы, к которым обращаются с более чем одного адреса, избыточные адреса перенаправляются
  • скрыть тип файла на страницах сайта

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

Правила используют регулярные выражения и могут быть очень сложными. Однако в этой статье я рассмотрю только наиболее часто используемые правила SEO-специалистами.

Чтобы этот файл работал, на веб-сервере должен быть установлен модуль mod_rewrite и параметр AllowOverride All должен быть установлен в файле конфигурации /etc/httpd/conf/httpd.conf

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

Проверьте, работает ли mod_rewrite

Поместите следующие строки в файл .htaccess и попробуйте открыть адрес http://domain.com/test, где domain.com — это имя вашего сайта. Если открывается сайт ganbox.com, значит все нормально и mod_rewrite работает.

Параметры + FollowSymLinks RewriteEngine On RewriteBase / RewriteRule test https://ganbox.com/? [NC, R, L]

Обычно файл .htaccess начинается со следующих нескольких строк. Для краткости они будут опущены в приведенных ниже примерах.

Параметры + FollowSymLinks -Indexes -MultiViews RewriteEngine On RewriteBase /

Просто перенаправьте на переименованную страницу

Если страница /about.html переименована в /contact.php

перенаправление 301 /about.html /contact.php

по аналогии

RewriteRule ^ about \ .html $ /contact.php [R = постоянный, L]

[L] говорит, что это последнее правило, которое нужно обработать.

Скрыть тип файла

Каждый адрес типа domain.com/page, так как страница может содержать строчные или прописные буквы, цифры и символы «-» и «_».

RewriteRule ^ [- \ w0-9 _] +) $ /$1.php [L, NC, QSA]

Пример: при вводе по адресу domain.com/contact-form2 будет выполняться поиск страницы /contact-form2.php

Предупреждение: если веб-сервер находится на компьютере Windows, указанное выше регулярное выражение, вероятно, не будет работать из-за ошибки в модуле apache win32 mod_rewrite.

RewriteRule ^ ([- А-Яа-яA-Za-z0-9 _] +) $ /$1.asp [L, NC, QSA]

Вместо \ w или А-Яа-яA-Za-z используйте АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЬЮЯАбвгдежзийклмнопрстуфхцчшщююA-Za-z

В этом примере при записи в domain.com/Terms_For_Use будет выполняться поиск страницы /Terms_For_Use.asp

так как в адресном поле браузера останется видимым http://domain.com/Terms_For_Use

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

RewriteRule ^ ([- А-Яа-яA-Za-z0-9 _] +) \. Html $ /$1.php [QSA, L]

в этом случае, если вы наберете http://domain.com/clients.html, будет выполнен поиск файла /clients.php. Такой подход имеет двойной положительный эффект — с одной стороны, поисковые системы, а с другой — безопасность.

Сокращение адресов

Очень часто при SEO-оптимизации динамических сайтов с CMS приходится сокращать адреса.

Такие длинные адреса

http://domain.com/index.php?sec=pro&кошка = 48&категория = авто

выглядеть так

http://domain.com/sec/pro/cat/48/category/avto

RewriteRule ^ sec / ([^ /] +) / cat / ([0-9] +) / category / ([^ /] +) /? $ /Index.php?sec=$1& cat = 2 доллара США& category = 3 доллара США [QSA, L]

Конечно, приведенное выше правило написано в одну строку, с пробелом между частями.

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

Хорошо, что старые адреса по-прежнему работают, и это не проблема для людей, которые сделали Закладки на старый адрес.

Перенаправить адреса в один файл

Преобразуйте адреса типа www.domain.com/contacts в index.php с помощью GET в переменной p имя страницы www.domain.com/index.php?p=contacts

# если файл не найден RewriteCond% {SCRIPT_FILENAME}! -f # если каталог не найден RewriteCond% {SCRIPT_FILENAME}! -d # .php? p = $ 1 [QSA, L]

Таким образом, каждый адрес будет отправлен на обработку в один файл index.php, часто называемый диспетчером.

В этом файле отправленная строка берется и помещается в переменную $ page. Затем он проверяется и, если файл со страницей не существует, он передается на страницу с ошибкой 404.php

$ page = isset ($ _ GET [‘p’])? $ _GET [‘p’]: ‘дом’; если (! file_exists (ABS_PATH. $ page. ‘. php’)) $ page = ‘404’; include_once (ABS_PATH. $ page. ‘. php’);

По соображениям безопасности очень важно, чтобы константа ABS_PATH была определена перед этим кодом, поскольку она имеет абсолютный путь к основному веб-каталогу, например:

определить (‘ABS_PATH’, ‘/ home / account / www /’);

где account — это имя пользователя cpanel хостинга.

Если ожидается, что адрес страницы будет содержать только латинские буквы и тире, то в index.php перед строкой с file_exists добавьте следующую строку:

$ page = preg_replace (‘| [^ A-Za-z _-] |’, », $ page); # удаляет все, кроме буквы и символов _ и —

Устранение проблемы с дублированием адресов

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

Если текущий адрес http://domain.com/page.php?id=7

то кнопка с английским флагом указывает на http://domain.com/page.php?lang=en&id = 7

и кнопку с болгарским флагом на http://domain.com/page.php?lang=bg&id = 7

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

Даже домашняя страница имеет 3 адреса: http://domain.com, http://domain.com/index.php и http://domain.com/index.php?lang=en

Ответ:

# удалить все строки index. * с веб-адреса. # Заб. Удалите эти два правила, если вы хотите установить форум или блог RewriteCond% {THE_REQUEST} \ /(.+/)? Index \. [^ /] +) (\ ?. *)? \ [NC] RewriteRule ^. (+ /)?index\.([^/ ]+)$ /% 1 [NC, R = 301, L] # Правила удаления параметра lang = bg при сохранении всего остального в адресе
RewriteCond% {QUERY_STRING} ^ (([^&] *&) *) (lang = bg) ($ |&) (. *) RewriteRule. * $ 0?% 1% 5 [N, E = REMOVED: true] RewriteCond% {ENV: REMOVED} true RewriteRule ^% {REQUEST_URI} [L, R = 301]

Предупреждение: если вы добавите первые два правила для удаления индекса с адресов и впоследствии решите установить форум, блог или какую-либо CMS в подкаталог на том же сайте, у вас могут возникнуть проблемы, и установка будет невозможна.

Удалите www.

Перенаправить www.domain.com/page на domain.com/page

RewriteCond% {HTTP_HOST} ^ www \. (Domain \ .com) $ [NC] RewriteRule ^ (. *) $ Http: //% 1% {REQUEST_URI} [R = 301, L]

Другие полезные приемы в .htaccess

Ограничение доступа

по IP-адресу

Для отключения доступа к сайту с IP-адреса 207.246.65.22 в начале файла напишите

# запретить веб-прокси Запретить с 207.246.65.22

Чтобы отключить всю сеть 64.4.0.0 — 64.4.63.255 Microsoft и их MSN Bot напишите

Запретить с 64.4.0.0/18

Забанить несколько сетей в Киеве, из которых блог получает спам с разных IP-адресов, таких как: 95.133.140.7, 95.133.192.198 и другие. записывать:

Запретить с 91.124.0.0/16 Запретить с 91.195.12.0/23 Запретить с 94.178.0.0/15 Запретить с 95.132.0.0/14

А так вы блокируете многих из Киева. Судите сами, ждете ли вы оттуда читателей.

по типу искомого файла

Запретить показ файлов с расширением .txt

lt; Файлы ~ "\ .txt $"gt; Заказать разрешить, запретить Запретить от всех lt; / Filesgt;

по типу браузера

Если у вас есть каталог / old, в котором находится старая версия сайта, поддерживающая архаичный браузер Internet Explorer 6, вы можете перенаправить все запросы из такого браузера вместе с отправленными им параметрами.

# для браузера IE6 или более ранней версии перенаправляет на / old RewriteCond% {HTTP_USER_AGENT} MSIE \ [1-6] RewriteRule! ^ old (/.*)?$ / old% {REQUEST_URI} [QSA, L]

ограничение ботов

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

RewriteCond% {HTTP_USER_AGENT} ^ $ RewriteRule ^. * — [F]

Это заблокирует всех ботов, которые не отправляют USER_AGENT. Боты поисковых систем Google, Yahoo и других не будут заблокированы. Если программист захочет просканировать ваш сайт с помощью бота, это не остановит его, потому что он выдаст вам действительный USER_AGENT. Также неплохо не блокировать с помощью Forbbiden, а перенаправлять на специальную страницу бота.

запретить доступ к сайту через прокси

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

RewriteCond% {HTTP: VIA}! ^ $ [ИЛИ]
RewriteCond% {HTTP: FORWARDED}! ^ $ [ИЛИ]
RewriteCond% {HTTP: USERAGENT_VIA}! ^ $ [ИЛИ]
RewriteCond% {HTTP: X_FORWARDED_FOR}! ^ $ [ИЛИ]
RewriteCond% {HTTP: PROXY_CONNECTION}! ^ $ [ИЛИ]
RewriteCond% {HTTP: XPROXY_CONNECTION}! ^ $ [ИЛИ]
RewriteCond% {HTTP: HTTP_PC_REMOTE_ADDR}! ^ $ [ИЛИ]
RewriteCond% {HTTP: XROXY_CONNECTION}! ^ $ [ИЛИ]
RewriteCond% {HTTP: X-FORWARDED-FOR}! ^ $ [ИЛИ]
RewriteCond% {HTTP: FORWARDED-FOR}! ^ $ [ИЛИ]
RewriteCond% {HTTP: X-FORWARDED}! ^ $ [ИЛИ]
RewriteCond% {HTTP: HTTP_CLIENT_IP}! ^ $
RewriteRule ^ (. *) $ — [F]

Безопасность

Очень важный! Если вы используете на своем сайте одно из следующего: картинки против автоматической регистрации (капча), умные шаблоны или у вас есть каталог, в который можно загружать фотографии или другие файлы. Тогда, вероятно, в этих каталогах будет больше прав на запись. Хакер может воспользоваться этой уязвимостью и загрузить сценарий оболочки root в такой каталог, что дает ему доступ к файлам, базе данных и выполнение команд. Примеры таких каталогов в WordPress — это каталоги в wp-content / uploads. В такие каталоги рекомендуется поместить htaccess, подобный следующему:

lt; Файлы ~ "^. * \. (php | pl | журнал | bak)"gt; Разрешить заказ, запретить Отклонить от всех Удовлетворить все lt; / Filesgt;

Это отключает доступ к файлам php и pl, загруженным в этот каталог. Заполните в первой строке через | расширения всех типов файлов, которые не должны присутствовать в этом каталоге. Другой вариант — если в каталоге только изображений должен быть список типов файлов, которые, как ожидается, будут в каталоге со следующим файлом htaccess:

RewriteCond% {REQUEST_URI}! (\. (Gif | jpe? G | png) $) RewriteRule. * — [F, L]

Скопируйте этот файл во все каталоги изображений. Поместите этот файл в каталог загрузки WordPress, и он защитит все создаваемые подкаталоги. В зависимости от того, какие файлы вы загружаете в блог, вы можете расширить список. Это со мной! (\. (Gif | jpe? G | png | zip | doc | xls | xml | html | txt) $), конечно, вам не нужно добавлять php, иначе это не имеет смысла.

Наилучший вариант — если все такие каталоги могут быть на один уровень выше основного веб-каталога. Так что в них не будет необходимости в htaccess, потому что даже если хакер загрузит файл, он не сможет получить к нему доступ через Интернет. К тому же, каждый раз архивируя проект на сайте, вы не будете копировать мегабайты ненужной временной информации.

Обработка ошибок

Установите разные обработчики ошибок: страницу служебного сообщения, локальную страницу или файл на другом сервере.

ErrorDocument 403 "Сожалею! Доступ закрыт!" ErrorDocument 404 /404.html ErrorDocument 500 http://drug.domain.com/error

в этом примере, если записан адрес несуществующей страницы, будет загружен файл /404.html

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

© В статье использованы материалы с сайта forum.modrewrite.com
Читайте так же:
Not found

Нам доверяют

Интернет магазин