КОнтакты, предложения, отзывы

.rar или .zip
Вложение
Онлайн-чат
На этом сайте, вы найдёте полезную информацию, практические советы в области веб-программирования, веб-дизайна и веб-разработок в целом. Мы с удовольствием поделимся с вами реальными примерами и решениями задач, связанных с jQuery , JavaScript , PHP и MySQL , версткой сайтов , поможем разобраться новичкам с современными технологиями, такими как Ajax , HTML5 , CSS3 и многими другими.

Работа с файлом .htaccess

.htaccess — наш герой :)

Файл .htaccess позволяет менять конфигурационные настройки веб-сервера Apache для конкретного сайта, или же управлять настройками папок сайта. Директивы файла .htaccess будут действовать только на файлы и папки текущего каталога. Данный файл не имеет названия, только расширение, создать его можно только в текстовом редакторе. При работе с .htaccess нужно быть очень внимательным, иначе сервер выдаст ошибку конфигурации 500. Комментарии в файле .htaccess начинаются с символа # , всё что идёт после него и до переноса строки, сервером не обрабатывается.

Наиболее важные директивы .htaccess

Установка кодировки сайта

Для установки кодировки сайта в файл .htaccess нужно прописать строку
AddDefaultCharset utf-8

запрет листинга каталогов

options -Indexes
После добавления этой строки просмотр содержимого текущего каталога будет недоступен,сервер выдаст ошибку 403 Forbidden.Разрешение листинга:
options +Indexes

Переопределение инексного файла

По умолчанию сервер ищет файл index.php или index.html. Переопределить его можно с помощью директивы
DirectoryIndex carusell.php
Теперь веб-сервер при входе на сайт откроет файл carusell.php. Можно указать любой файл, не обязательно с расширением .php или .html.

Скрытие конкретных файлов

Для того чтобы в листинге скрыть определённые файлы, в файле .htaccess нужно прописать строку
IndexIgnore *.rar *
Через пробел можно указывать все * файлы, конкретные расширения *.rar или конкретные файлы carusell.php.

Просьба к серверу выполнять PHP-код в других файлах

PHP-код по умолчанию выполняется только в файлах php. Если прописать в .htaccess строку
AddType application/x-httpd-php .html .htm .txt .css
то файлы с расширениями .html, .txt, .css и .htm буду передаваться интерпреатору PHP. В css файле нужно будет поставить header:
<?php header ("Content-type: text/css");?>
чтобы интерпретатор понимал, что это именно файл css.

Ещё о типах файлов

AddHandler application/x-httpd-php .html
AddHandler cgi-script .pl .py .jsp .asp .htm .shtml .sh .cgi
AddType application/x-javascript .js
AddType text/css .css
AddType text/xml .xml
AddType application/octet-stream .doc .mov .avi .pdf .xls 
# ForceType application/x-httpd-php
Первая строчка позволит нашим php файлам иметь расширение html, но выполняться как php.
Второй строкой указано, какие расширения файлов должны выполняться как cgi скрипты.
Третья, четвертая и пятая строки, на всякий случай уточняют мим-тип файлов с разрешением css, js, xml. Не путайте с присвоением заголовка в ответе сервера на запрос, как это сделано в первых двух строках.
Шестая строчка это участка, нужна если на вашем сайте есть скачиваемый для пользователей контент. Если добавить эту строку, то при обращении к данным файлам им будет предлагаться скачать их на компьютер, а не как это сейчас в современным браузерах куча плагинов, которые даже word открывают в браузере.
Седьмую строку я закомментировал. Это строчка в принудительно-добровольном порядке, будет все файлы с вашего сервера запустить как php. Её лучше использовать лишь в отдельных папках, при необходимости.

Свои собственные страницы ошибок

Прописываем:
ErrorDocument 403 /путь_к_документу
ErrorDocument 404 /путь_к_документу
Можно указывать любые файлы html, htm, php, img. Теперь если пользователь обратится к несуществующему адресу (ошибка 404) на вашем сайте или попробует просмотреть каталог, к которому закрыт доступ(ошибка 403), он увидит не стандартные, а ваши собственные страницы ошибок. Есть возможность также вывести свой текст, заключив его в кавычки:
ErrorDocument 403 "Доступ к данному каталогу закрыт"

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

Для управления доступом используются три директивы: Order, которая управляет двумя другими - Deny и Allow.
# Использование Order не обязательно:
#Order Deny, Allow
# Запрет доступа всем:
Deny from all
# Разрешение доступа для всех:
Allow from all
#Разрешаем для конкретных IP, перечисляя их через запятую или пробел:
Allow from 127.0.0.2, 127.0.0.1 

Редирект

Иногда нужно делать перенаправление по другому адресу. Например, пользователь переходит по адресу нашего сайта, а мы хотим его перенаправить на другой URL.
redirect /index.php /test.php
Как видим, всё просто. При попытке запроса файла index.php сервер отдаст вместо него test.php.

Ещё настройки…

<IfModule mod_setenvif.c>
    SetEnv TZ Europe/Moscow
</IfModule>
ServerSignature Off
Первая строчка устанавливает часовой пояс. Например в Apache 2.22.22 был баг связанный с этой опцией. Функции времени в php не работали, пока не установишь часовой пояс.
Вторая строка это подпись сервера. Вы их не раз видели на всяких системных страницах типа 500ой ошибки или 403ей. Обычно там какая-нибудь техническая информация и почта вебмастера. Я предпочитаю даже в таких мелочах скрывать данные о софте на сервере. Коллеги параноики меня поддержат.

Когда нет доступа к php.ini

С помощью .htaccess мы также можем управлять рядом настроек PHP. На виртуальном хостинге, как правило, нет возможности изменять настройки php.ini. Чаще всего этого и не требуется. Но все же есть ряд опций контроль над которыми может нам быть полезен. Например, увеличить лимит на загрузку файлов, или лимит передачи данным методом POST.
<ifModule mod_php.c>
  php_value	upload_max_filesize	32M
  php_value	post_max_size		10M
  php_value	default_charset utf-8
  php_value	max_execution_time 200
</ifModule>
Первая строчка разрешить загружать файлы размером до 32 Мегабайт. По умолчанию в php обычно это значение 8 или 16 мегабайт.
Второй строкой разрешаем постинг объемом до 10 мегабайт. По умолчанию это значение обычно 2 Мегабайта.
Третья строка устанавливает кодировку ПО используемую вашими скриптами. По своей сути она дублирует строку: «AddDefaultCharset UTF-8».
Четвертой строкой изменяем лимит времени выделенный на выполнение скрипта. По умолчанию он обычно равен 30 секундам. Но иногда для выполнения каких нибудь сложных обработок требуется больше времени.

Кэширование файлов для более быстрой загрузки сайта

Модуль mod_headers
<ifModule mod_headers.c>
    #кэшировать html и htm файлы на один день
    <FilesMatch ".(html|htm)$">
        Header set Cache-Control "max-age=43200"
    </FilesMatch>
    #кэшировать css, javascript и текстовые файлы на одну неделю
    <FilesMatch ".(js|css|txt)$">
        Header set Cache-Control "max-age=604800"
    </FilesMatch>
    #кэшировать флэш и изображения на месяц
    <FilesMatch ".(flv|swf|ico|gif|jpg|jpeg|png)$">
        Header set Cache-Control "max-age=2592000"
    </FilesMatch>
    #отключить кэширование
    <FilesMatch ".(pl|php|cgi|spl|scgi|fcgi)$">
        Header unset Cache-Control
    </FilesMatch>
</IfModule>
Модуль mod_expires:
<ifModule mod_expires.c>
    ExpiresActive On
    #по умолчанию кеш в 5 секунд
    ExpiresDefault "access plus 5 seconds"
    #кэшировать флэш и изображения на месяц
    ExpiresByType image/x-icon "access plus 2592000 seconds"
    ExpiresByType image/jpeg "access plus 2592000 seconds"
    ExpiresByType image/png "access plus 2592000 seconds"
    ExpiresByType image/gif "access plus 2592000 seconds"
    ExpiresByType application/x-shockwave-flash "access plus 2592000 seconds"
    #кэшировать css, javascript и текстовые файлы на одну неделю
    ExpiresByType text/css "access plus 604800 seconds"
    ExpiresByType text/javascript "access plus 604800 seconds"
    ExpiresByType application/javascript "access plus 604800 seconds"
    ExpiresByType application/x-javascript "access plus 604800 seconds"
    #кэшировать html и htm файлы на один день
    ExpiresByType text/html "access plus 43200 seconds"
    #кэшировать xml файлы на десять минут
    ExpiresByType application/xhtml+xml "access plus 600 seconds"
</ifModule>

Защищаем сайт

посылаем хакеров-недоучек на… сайт Microsoft

• Для злоумышленников – любителей поиска скриптов с уязвимостями и других «дыр» в защите веб-сайта – добавьте в файл .htaccess следующие директивы:
redirect /admin.php http://www.microsoft.com
redirect /DOCUMENT_ROOT http://www.microsoft.com
redirect /_mem_bin http://www.microsoft.com
redirect /msadc http://www.microsoft.com
redirect /scripts http://www.microsoft.com
redirect /_vti_bin http://www.microsoft.com
redirect /_vti_inf.html http://www.microsoft.com
redirect /phpmy/scripts/setup.php http://www.microsoft.com
redirect /phpmyadmin/scripts/setup.php http://www.microsoft.com
redirect /php/scripts/setup.php http://www.microsoft.com
redirect /phpMy/scripts/setup.php http://www.microsoft.com
redirect /_phpmyadmin/scripts/setup.php http://www.microsoft.com
redirect /pma/scripts/setup.php http://www.microsoft.com
redirect /admin/scripts/setup.php http://www.microsoft.com
redirect /MyAdmin/scripts/setup.php http://www.microsoft.com
redirect /sql/scripts/setup.php http://www.microsoft.com
redirect /mysql/scripts/setup.php http://www.microsoft.com
redirect /setup.php?dir http://www.microsoft.com
redirect /MSOffice/cltreq.asp http://www.microsoft.com
redirect /(null) http://www.microsoft.com
redirect///?_SERVER[DOCUMENT_ROOT] http://www.microsoft.com
redirect//?_SERVER[DOCUMENT_ROOT] http://www.microsoft.com
redirect /assets/snippets/reflect/snippet.reflect.php? http://www.microsoft.com
redirect /pagead/test_domain.js http://www.microsoft.com
redirect /pagead/osd.js http://www.microsoft.com
redirect /pagead/expansion_embed.js http://www.microsoft.com
redirect /pagead/render_ads.js http://www.microsoft.com
redirect /pagead/atf.js http://www.microsoft.com
redirect /.svn/entries http://www.microsoft.com
RedirectMatch (.*)cmd.exe$ http://www.microsoft.com$1
Суть этих директив сводится к тому, что любой запрос, содержащий в строке адреса вышеуказанные параметры (например, /_vti_bin или /scripts) будет автоматически перенаправляться на сайт Microsoft (Sorry, Bill Gates!). Вместо http://www.microsoft.com вы можете указать любой другой адрес (например, несуществующий, или адрес какого-нибудь хакерского сайта, или адрес сайта антивирусной компании).

•Данный код позволяет защитить сайт от scripts enjection и нежелательных модификаций _REQUEST и/или GLOBALS:
#Включаем отслеживание сим-ссылок
Options +FollowSymLinks
#Запускаем url_rewriting
RewriteEngine On
#Блокируем все ссылки, содержащие script
RewriteCond %{QUERY_STRING} (<|%3C).*script.*(>|%3E) [NC,OR]
#Блокируем все скрипты, которые пытаются изменить переменные PHP Globals:
RewriteCond %{QUERY_STRING} GLOBALS(=|[|\%[0-9A-Z]{0,2}) [OR]
#Блокируем все скрипты, которые пытаются изменить переменную _REQUEST:
RewriteCond %{QUERY_STRING} _REQUEST(=|[|\%[0-9A-Z]{0,2})
#Перенаправляем все подобные на страницу с ошибкой 403 — запрещено
RewriteRule ^(.*)$ index.php [F,L]

Защищаем определенный файл

•Нижеследующий код позволяет вам запретить доступ к любому файлу — при запросе будет выдаваться ошибка 403. Для примера я закрыл доступ к самому файлу htaccess, повысив общий уровень безопасности сайта.
#Защищаем .htaccess файл
<files .htaccess="">
order allow,deny
deny from all
</files>
# защищаем wpconfig.php
<Files wp-config.php>
order allow,deny
deny from all
</Files>
<FilesMatch ".(inc|cfg)$">
   Order allow,deny
   Deny from all
</FilesMatch>
<FilesMatch ".htpasswd">
   Order allow,deny
   Deny from all
</FilesMatch>

Блокируем все запросы от нежелательных User Agents

•Это правило позволяет заблокировать нежелательные User Agent, которые могут быть потенциально опасными или просто перегружать сервер ненужными запросами.
#Блокируем плохих ботов и роботов
SetEnvIfNoCase user-Agent ^FrontPage [NC,OR]
SetEnvIfNoCase user-Agent ^Java.* [NC,OR]
SetEnvIfNoCase user-Agent ^Microsoft.URL [NC,OR]
SetEnvIfNoCase user-Agent ^MSFrontPage [NC,OR]
SetEnvIfNoCase user-Agent ^Offline.Explorer [NC,OR]
SetEnvIfNoCase user-Agent ^[Ww]eb[Bb]andit [NC,OR]
SetEnvIfNoCase user-Agent ^Zeus [NC]
<limit get="" post="" head="">
Order Allow,Deny
Allow from all
Deny from env=bad_bot
</limit>
Список User Agent браузеров, роботов и пауков поисковых машин, веб-каталогов, менеджеров закачек, спам-ботов и плохих ботов можно найти на сайте http://www.user-agents.org/.

Пример моего .htaccess

# Редиректы с www на без www
<IfModule mod_rewrite.c>
Options +FollowSymLinks
RewriteEngine on
RewriteCond %{HTTP_HOST} ^www\.(.*) [NC]
RewriteRule ^(.*)$ http://%1/$1 [R=301,L]
</IfModule>

#Редиректы на корень сайта
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
#RewriteRule ^.*$ index.php [QSA,L]
RewriteRule ^.+$ index.php/$1 [QSA,L]


# запрещаем кэширование:
<filesMatch "\.(pl|php|html|less|css|cgi|js|spl|scgi|fcgi|jpg|jpeg|png|gif|mp3|wav)$">
  FileETag None
  <ifModule mod_headers.c>
     Header unset ETag
     Header set Cache-Control "max-age=0, no-cache, no-store, must-revalidate"
     Header set Pragma "no-cache"
     Header set Expires "Wed, 11 Jan 1984 05:00:00 GMT"
  </ifModule>
</filesMatch>

Options All -ExecCGI -Indexes -Includes +FollowSymLinks

Пока всё, спасибо за внимание :) По возможности буду дополнять
2015.05.19 99

По статистике Майкрософт, в наших странах виндой люди не пользуются :)
Войдите или Зарегистрируйтесь чтобы оставить комментарий

Комментарии


    Яндекс.Метрика Яндекс.Метрика