Как стать автором
Обновить
17
Карма
0
Рейтинг
Наталья Андриец @tashik

Пользователь

  • Подписчики 10
  • Подписки 6

Основы.htaccess на примерах

Моего опыта пока не хватает, чтобы так это оценить. Для меня эта статья была отправной точкой практического применения .htaccess. Я писала в посте, что уровень здесь для начинающих, чтобы люди опытные могли этот пост просто пропустить. В статье есть ссылки для более углубленного изучения тех или иных вопросов (в оригинале их больше), но цель ее - не составление подробного мануала, а создание и минимальное объяснение "затравочного" файла .htaccess для создания сайтов.

Основы.htaccess на примерах

огромное спасибо за ссылку.

Основы.htaccess на примерах

Приведенный ниже код позволяет поисковым роботам (в данном случае, googlebot) просматривать страницу и делает так, чтобы я, с моего IP, мог входить на сайт без пароля, а мой клиент и посетители – по паролю. Также данным кодом разрешено проведение XHTML и CSS валидации! (w3.org)

AuthName "SiteName Administration"
AuthUserFile /home/sitename.com/.htpasswd
AuthType basic
Require valid-user
Order deny,allow
Deny from all
Allow from 24\\.205\\.23\\.222
Allow from w3.org htmlhelp.com
Allow from googlebot.com
Satisfy Any

Каждый образец кода скопирован с форума htaccessElite. Там же можно найти дополнительную информацию по каждому из образцов.
NB!: Большинство приведенных примеров можно использовать с директивой Files or Filesmatch, чтобы инструкции, содержащиеся в них, применялись только к конкретным файлам.
NB!: Инструкции, направленные на переопределение (rewrite) должны всегда предваряться следующими строками:

Options +FollowSymLinks
RewriteEngine On
RewriteBase /

Чтобы присвоить файлу тип независимо от его имени или расширения

#Делает так, что файлы, напр., image.gif, blah.html, index.cgi исполняются как php
ForceType application/x-httpd-php

Чтобы переадресовать запросы, созданные не по https протоколу на https, и решить проблему необходимости повторной авторизации при использовании htpasswd

SSLOptions +StrictRequire
SSLRequireSSL
SSLRequire %{HTTP_HOST} eq "google.com"
ErrorDocument 403 https://google.com

Редирект с битых ссылок, не вредящий SEO
Для одного удаленного файла

Redirect 301 /d/file.html http://www.htaccesselite.com/r/file.html

Для группы файлов типа blog/this.php?gh
RedirectMatch 301 /blog(.*) http://www.askapache.com/$1

При смене доменного имени

Redirect 301 / http://www.newdomain.com
Обязательное www в запросе
Options +FollowSymLinks
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_URI} !^/robots\\.txt$
RewriteCond %{HTTP_HOST} !^www\\.example\\.com$ [NC]
RewriteRule ^(.*)$ http://www.example.com/$1 [R=301,L]

Необязательное www в запросе

Options +FollowSymLinks
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_URI} !^/robots\\.txt$ [NC]
RewriteCond %{HTTP_HOST} !^www\\.[a-z-]+\\.[a-z]{2,6} [NC]
RewriteCond %{HTTP_HOST} ([a-z-]+\\.[a-z]{2,6})$ [NC]
RewriteRule ^/(.*)$ http://%1/$1 [R=301,L]

Убираем субдомен из строки запроса

Options +FollowSymLinks
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_URI} !^/robots\\.txt$
RewriteCond %{HTTP_HOST} \\.([a-z-]+\\.[a-z]{2,6})$ [NC]
RewriteRule ^/(.*)$ http://%1/$1 [R=301,L]

Убираем субдомен из строки запроса

Options +FollowSymLinks
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} \\.([^\\.]+\\.[^\\.0-9]+)$
RewriteCond %{REQUEST_URI} !^/robots\\.txt$ [NC]
RewriteRule ^(.*)$ http://%1/$1 [R=301,L]

Перенаправление всех посетителей на другой сайт, за исключением одного IP (бывает полезно при веб-разработке)

ErrorDocument 403 http://www.someothersite.com
Order deny,allow
Deny from all
Allow from 24.33.65.6

Операции над переменными (mod_env)
Установка часового пояса сервера:

SetEnv TZ America/Indianapolis

Установка email администратора сервера:

SetEnv SERVER_ADMIN webmaste@htaccesselite.com

Выключение ServerSignature
ServerSignature Off
Добавление языка и кодировки в заголовки без использования мета-тэгов
AddDefaultCharset UTF-8
# Или AddType 'text/html; charset=UTF-8' html
DefaultLanguage en-US

C использованием директивы Files

AddDefaultCharset UTF-8
DefaultLanguage en-US

C использованием директивы FilesMatch (более предпочтительно)

AddDefaultCharset UTF-8
DefaultLanguage en-US

Использование собственного файла php.ini с помощью mod_php или php, установленного как cgi
Статья на тему: Custom PHP.ini tips and tricks
Если php работает как модуль Apache (mod_php) в корневом файле .htaccess установите следующее:
SetEnv PHPRC /location/todir/containing/phpinifile
Если php установлен как cgi, поместите Ваш файл php.ini в директорию, содержащую php, в описываемом случае /cgi-bin/, а в файл htaccess добавьте следующее:
AddHandler php-cgi .php .htm Action php-cgi /cgi-bin/php5.cgi
Если cgi-php работет через оболочку (для FastCGI), необходимо в скрипте оболочки изменить #!/bin/sh export PHP_FCGI_CHILDREN=3 exec /user3/x.com/htdocs/cgi-bin/php5.cgi на следующее #!/bin/sh export PHP_FCGI_CHILDREN=3 exec /x.com/cgi-bin/php.cgi -c /abs/path/to/php.ini
Безопасность папок: Удаление возможности исполнять скрипты
Это можно сделать несколькими способами. К примеру:
AddHandler cgi-script .php .pl .py .jsp .asp .htm .shtml .sh .cgi
Options -ExecCGI

Таким образом Вы определите, что файлы с перечисленными расширениями попадают в сферу действия команды -ExecCGI, а значит и -FollowSymLinks
Разрешение только методов GET и PUT при обращении к серверу.
Options -ExecCGI -Indexes -All +FollowSymLinks
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_METHOD} !^(GET|PUT)
RewriteRule .* - [F]
Обработка всех файлов gif скриптом cgi
Action image/gif /cgi-bin/filter.cgi

Обработка запроса / файла в зависимости от метода
Script PUT /cgi-bin/upload.cgi
Форсированная загрузка файла вместо отображения его содержимого прямо в браузере
AddType application/octet-stream .avi
AddType application/octet-stream .mpg

А в HTML-коде достаточно поставить ссылку прямо на нужный файл.
Отображение исходного кода вместо выполнения скрипта
Если возникла необходимость отобразить файлы типа .pl, .py или .cgi в виде исходного кода, а не исполнять их как скрипты, создайте в папке, где они расположены, файл .htaccess, содержащий следующее:
RemoveHandler cgi-script .pl .py .cgi
Многократное увеличение скорости работы сайта при помощи кэширования!
Статья на тему: Speed Up Sites with htaccess Caching

# НА МЕСЯЦ

Header set Cache-Control "max-age=2592000"

# НА НЕДЕЛЮ

Header set Cache-Control "max-age=604800"

# НА ДЕНЬ

Header set Cache-Control "max-age=43200"

Предотвращение кражи изображений и файлов

Options +FollowSymLinks
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://(www\\.)?askapache.com/.*$ [NC]
RewriteRule \\.(gif|jpg|swf|flv|png)$ http://www.askapache.com/evil-hotlinker.… [R=302,L]

Замена стандартных сообщений об ошибке

ErrorDocument 404 /favicon.ico
ErrorDocument 403 https://secure.htaccesselite.com
ErrorDocument 404 /cgi-bin/error.php
ErrorDocument 400 /cgi-bin/error.php
ErrorDocument 401 /cgi-bin/error.php
ErrorDocument 403 /cgi-bin/error.php
ErrorDocument 405 /cgi-bin/error.php
ErrorDocument 406 /cgi-bin/error.php
ErrorDocument 409 /cgi-bin/error.php
ErrorDocument 413 /cgi-bin/error.php
ErrorDocument 414 /cgi-bin/error.php
ErrorDocument 500 /cgi-bin/error.php
ErrorDocument 501 /cgi-bin/error.php

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


AuthName "Prompt"
AuthType Basic
AuthUserFile /home/askapache.com/.htpasswd
Require valid-user

Защита паролем нескольких файлов:

AuthName "Development"
AuthUserFile /.htpasswd
AuthType basic
Require valid-user

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

# Частичное разрешение (доменное имя)
Allow from 10.1.0.0/255.255.0.0

# Полное разрешение на 1 IP
Allow from 10.1.2.3

# Полное разрешение на несколько IP
Allow from 192.168.1.104 192.168.1.205

# Разрешение при совпадении части IP адреса с образцом
Allow from 10.1
Allow from 10 172.20 192.168.2

# разрешение для пары сеть/маска подсети
Allow from 10.1.0.0/255.255.0.0


Использование переменных окружения в зависимости от посетителя:

SetEnvIf User-Agent ^KnockKnock/2\\.0 let_me_in
Order Deny,Allow
Deny from all
Allow from env=let_me_in
Разрешение для домена (при запрете для субдомена)
Order Allow,Deny
Allow from apache.org
Deny from foo.apache.org
Доступ с IP адреса без пароля, а не с IP – по паролю
AuthUserFile /home/www/site1-passwd
AuthType Basic
AuthName MySite
Require valid-user
Allow from 172.17.10
Satisfy Any

Блокирование доступа к файлам в определенные часы
Options +FollowSymLinks
RewriteEngine On
RewriteBase /
# В 16 часов закрыть доступ к файлам
RewriteCond %{TIME_HOUR} ^16$
RewriteRule ^.*$ - [F,L]

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

# Базовые установки
##############################################
Options +ExecCGI -Indexes
DirectoryIndex index.php index.html index.htm

### Умолчания ###
ServerSignature Off
AddType video/x-flv .flv
AddType application/x-shockwave-flash .swf
AddType image/x-icon .ico
AddDefaultCharset UTF-8
DefaultLanguage en-US
SetEnv TZ America/Indianapolis
SetEnv SERVER_ADMIN webmaster@^^SITE^^.^^TLD^^

### FAST-CGI ###
AddHandler fastcgi-script fcgi
AddHandler php-cgi .php
Action php-cgi /cgi-bin/php5-wrapper.fcgi

# Заголовки и кэширование
##############################################
#### КЭШИРОВАНИЕ ####
# НА ГОД

Header set Cache-Control "max-age=2592000"

# НА НЕДЕЛЮ

Header set Cache-Control "max-age=604800"

# НА 10 МИНУТ

Header set Cache-Control "max-age=600"

# НЕ КЭШИРОВАТЬ

Header unset Cache-Control


# ПЕРЕОПРЕДЕЛЕНИЯ И ПЕРЕНАПРАВЛЕНИЯ
##############################################
### SEO редирект ###
Redirect 301 /2006/uncategorized/htaccesselitecom-aboutus.html http://www.^^SITE^^.^^TLD^^

### ПЕРЕОПРЕДЕЛЕНИЯ ###
RewriteEngine On
RewriteBase /

# АВТОРИЗАЦИЯ
##############################################
AuthName "^^SITE^^.^^TLD^^"
Require valid-user
AuthUserFile /^^SITE^^.^^TLD^^/.htpasswd
AuthType basic

Мастерхост отключил сервера

В прошлом году была у них эта проблема - не могу поверить, что они ее решить не смогли!

Case-study: эпидемия ПРЕВЕД-вируса

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

Давайте заведем блог «Логические задачи»?

В общем, я приняла для себя индивидуальное решение: не минусую, если меня не лохуют скрытой рекламой :-)

Давайте заведем блог «Логические задачи»?

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

Давайте заведем блог «Логические задачи»?

so есть в этом смысл - не все же тут высокопродвинутые программисты с работой, удовлетворяющей самые смелые материальные и творческие ожидания. Но не думаю, что это тема для коллективного блога или для поста в нем. Я писала об этом в персональном блоге, в котором могу делать, что хочу и что не противоречит правилам Хабра. Не нужно Вам это - ну не читайте :-)

Давайте заведем блог «Логические задачи»?

такие задачки задают на собеседованиях на вакансию, к примеру, php-программиста

Давайте заведем блог «Логические задачи»?

Вы гибкий человек, Антон :-)

Давайте заведем блог «Логические задачи»?

Ладно, простите за тон. Просто вчерашний пост с "боянами" уровня 8 класса (там народ писал, что 5-го) всколыхнул в разделе "Я умный" целый ряд топиков с предложением решить логические задачки или запостить их - как в Вашем случае. Совпадение? Что бы то ни было - нужное, на мой взгляд, дело. Аудитория здесь разная, люди решали задачки с удовольствием, значит, наверное, есть смысл что-то такое сделать.

Давайте заведем блог «Логические задачи»?

Rusan, ты не просто умный - ты слишком умный. Но идея чужая: ты, кстати, задачки то порешал, которые я публиковала вчера :-)

Задачки на собеседованиях на вакансию программиста

ага, специально для собеседования придумана *LOL*

Задачки на собеседованиях на вакансию программиста

спасибо, куплю. Сынок подрастет - будем тренировать логику!

Задачки на собеседованиях на вакансию программиста

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

Задачки на собеседованиях на вакансию программиста

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

Задачки на собеседованиях на вакансию программиста

неее.... Я гуманитарий, я физику не помню нифига :-)

Задачки на собеседованиях на вакансию программиста

ага, несколько решений есть.

Задачки на собеседованиях на вакансию программиста

для этой задачи не требовался php :-)

Информация

В рейтинге
Не участвует
Откуда
Москва и Московская обл., Россия
Дата рождения
Зарегистрирована
Активность