Статьи

5 забавных и практичных решений Htaccess

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

Файлы Htaccess — это файлы конфигурации в виде простого текста, используемые веб-сервером Apache HTTP. Они позволяют пользователям устанавливать параметры уровня каталога, не требуя доступа к файлу httpd.conf . Таким образом, требуется, чтобы ваш сервер использовал Apache и веб-хост, который разрешает файлы htaccess (самые популярные хосты делают).

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

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

Есть способы исправить эту растущую проблему с помощью htaccess. Сначала вот изображение, которое мы пытаемся защитить.

01
02
03
04
05
06
07
08
09
10
11
RewriteEngine on
RewriteCond %{HTTP_REFERER} !^$
 
#domains that can link to images
#add as many as you want
  RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?demo.collegeaintcheap.com [NC]
  # RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?noahhendrix.com [NC]
 
 
#show no image when hotlinked
  RewriteRule \.(jpg|png|gif)$ — [NC,F,L]

Мы пройдем через эту строку за строкой.

  1. Сначала нам нужно включить движок переписывания в Apache, это позволяет нам перенаправить запрос пользователя.
  2. Далее мы начинаем устанавливать наши условия, используя RewriteCond . Это функция, которая принимает два аргумента: TestString и CondPattern . TestString — строка, с которой мы хотим проверить наш CondPattern (используя регулярные выражения). $ {HTTP_REFERER} — это переменная, предоставляемая Apache, которая содержит домен, из которого поступил запрос, в этом случае мы хотим разрешить запросы от пустых HTTP-ссылок, чтобы защитить пользователей, которые находятся на прокси-сервере, который отправляет пустые ссылки.
  3. Затем мы устанавливаем домены, с которых мы разрешаем связывать наши изображения, используя тот же синтаксис, за исключением того, что теперь мы предоставляем URL. Флаг [NC] в конце команды просто указывает двигателю игнорировать корпус. Вы можете добавить столько строк доменов, сколько захотите, используя тот же синтаксис. Для примера я добавил свой личный домен, но закомментировал его.
  4. Наконец, последняя строка — это RewriteRule, который мы хотим использовать, если какое-либо из указанных выше условий не выполняется. Он также принимает два аргумента: Pattern и Substitution , где pattern — это совпадение с регулярным выражением, а замена — это то, чем мы хотим заменить любые совпадения В этом случае мы ищем запросы, которые заканчиваются на jpg, png и gif; если найдено, мы хотим использовать пустую замену. Тем не менее, во флагах мы сообщаем ему, кроме того, что мы хотим сделать, NC означает, что ни в коем случае, F отправляет пользователю запрещенную ошибку 403, а L говорит движку прекратить переписывание, поэтому другие правила не применяются.

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

1
2
#show an alternate image
  RewriteRule \.(jpg|png|gif)$ http://demo.collegeaintcheap.com/envato/htaccess/hotlink/images/hotlink.jpeg [NC,R,L]

Вы можете изменить URL-адрес на любой путь к изображению, который вам нужен в вашем домене, но помните, что он не должен заканчиваться на jpg, png или gif, поскольку он будет повторно применять правило и отправлять сервер в бесконечный цикл. Я решил использовать старое расширение .jpeg, чтобы исправить это. Флаг R, который заменил F, просто отправляет перенаправление.

Это отличный маленький совет, если у вас есть спамер на вашем сайте. Если вы можете найти их IP в своих журналах, просто добавьте его в файл htaccess.

1
2
3
Order Deny,Allow
Deny from 24.121.202.23
# Deny from 0.0.0.0

Используя директиву Order в модуле mod_access, мы можем указать IP для запрета и разрешения. Просто используя синтаксис Deny из IP-адреса, мы можем запретить этим пользователям доступ к нашему каталогу.

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

1
2
3
ErrorDocument 404 http://demo.collegeaintcheap.com/envato/htaccess/errors/404.html
ErrorDocument 403 http://demo.collegeaintcheap.com/envato/htaccess/errors/403.html
ErrorDocument 500 http://demo.collegeaintcheap.com/envato/htaccess/errors/500.html

ErrorDocument принимает два аргумента: код ошибки и документ . В приведенном выше коде я создал документы об ошибках для 3 самых распространенных ошибок HTTP: 404 не найдены, 403 запрещены и 500 ошибок сервера. Затем вы можете указать полный URL-адрес или относительный путь к документам об ошибках. Вы также можете перенаправить их на PHP-скрипт, который регистрирует ошибки в базе данных или отправляет их вам по электронной почте (хотя это может раздражать). Это отличный способ взять под контроль ошибки в вашем веб-приложении. Обязательно ознакомьтесь с витриной страницы ошибок 404 журнала Smashing Magazine .

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

1
2
3
4
RewriteEngine on
RewriteCond %{REQUEST_URI} !/upgrade.html$
RewriteCond %{REMOTE_HOST} !^24\.121\.202\.30
RewriteRule $ http://demo.collegeaintcheap.com/envato/htaccess/upgrade/upgrade.html [R=302,L]

Для этого мы снова используем движок перезаписи , но в некотором роде. Сначала нам нужно установить условие, исключающее документ, описывающий обновление, иначе наш сервер запустит бесконечный цикл. Далее мы исключаем перенаправление одного IP-адреса в целях тестирования. Наконец, мы используем правило перезаписи для отправки пользователей на страницу обновления. Флаги, на которые мы смотрели раньше, за исключением того, что на этот раз мы устанавливаем редирект на код состояния 302, сообщая браузеру, что страница временно перемещена и соответственно обрабатывает кэширование. Журнал Smashing Magazine, опять же, представляет собой отличную витрину эффективных страниц обслуживания .

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

1
Options -Indexes

Теперь пользователи, которые запрашивают каталог, в котором нет индексного файла, будут показывать страницу с ошибкой 403.

Вот несколько моих любимых способов использования htaccess. Оставь свой в комментариях! Я доступен для помощи в комментариях или в твиттере . Если есть большой интерес, я буду делать больше учебников htaccess с решениями ваших запросов в комментариях. Спасибо за прочтение!