Pull to refresh

Comments 29

Между метками надо ставить запятые. И статьи не видно пока...
Приведенный ниже код позволяет поисковым роботам (в данном случае, 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
кеширование на сутки это 86400 секунд ;)
а строчка "# НА ГОД" на самом деле про месяц
AuthName "Prompt"
AuthType Basic
AuthUserFile /home/askapache.com/.htpasswd
Require valid-user

Может кто подскажет как в таком случае реализовать log out? чтобы зайти под другим пользователем например. А то мы с коллегами собак ели-ели, душили-душили, но до сих пор не было найдено никакого workaround :)
Извините, конечно, но по-моему это просто ужасно.
Это не статья, а набор выжимок из разных источников, написанных в совершенно разном стиле, повторяющихся, не откомментированных, неверных в конце-концов.
Зачем это было написано здесь?
На любой вопрос по .htaccess давно и понятно отвечает гугл, нужно только правильно спросить.
Моего опыта пока не хватает, чтобы так это оценить. Для меня эта статья была отправной точкой практического применения .htaccess. Я писала в посте, что уровень здесь для начинающих, чтобы люди опытные могли этот пост просто пропустить. В статье есть ссылки для более углубленного изучения тех или иных вопросов (в оригинале их больше), но цель ее - не составление подробного мануала, а создание и минимальное объяснение "затравочного" файла .htaccess для создания сайтов.
Я и говорю, что не очень хорошую отправную точку вы себе выбрали.
С опытом придет, что гораздо плодотворнее зайти на официальный ресурс, зайти туда, где написано теми людьми, которые это создали, а не теми, у кого получилось это использовать. Именно получилось.
Например, сюда: http://httpd.apache.org/docs/2.0/howto/h…
А потом подняться на уровень выше, сюда: http://httpd.apache.org/docs/2.0/
И узнать, что оказывается разработчики заботятся о людях, использующих их продукт, и даже часть документации переведена на русский.
От себя лично, основываясь на богатом опыте, могу сказать, что умение читать и понимать документацию прежде всего на английском (а в последствии и на любом другом языке) — это основополагающий фактор в разработке программного обеспечения.
Надо только знать, где и как искать.
Посмотрите, в вашей «статье» даже примеры слизаны с оригинального мануала. Но это примеры (хорошие примеры) сверху приправлены толстым слоем индивидуального восприятия того человека, кто пытался писать документацию. Это восприятие зачастую изменяет, а порой и вообще перевирает факты.
Надеюсь, суть моего комментария понятна.
Знающие люди, подскажите плиз, как же все-таки сделать множественные виртуальные субдомены с помощью mod_rewrite?

То есть чтобы запросы типа bazooka.example.com переписывались на http://www.example.com/?page=bazooka

Надо вроде как добавить server alias *.example.com, но почему-то это никак не хочет работать. Видимо, делаю что-то не так.
Спасибо.
У меня вопрос, я все ни как не могу понять как сделать: задача - преобразовать ссылки типа

http://domain.ru/STRUCTURE/4523

к типу

http://domain.ru/index.php?action=structure&id=4523

Не подскажете как сделать???
Смотря чего Вы этим хотите добиться. Я никогда не встречала необходимости в таком преобразованиие, но всегда приходится делать наоборот. Чтобы сделать наоборот, используются директивы mod_rewrite, ну а чтобы сделать то, что Вам надо, достаточно в файле htaccess установить RewriteEngine Off. Только боюсь, что Вы не совсем правильно формулируете задачу.
Сейчас постараюсь описать.

Набирает кто-то в браузере: http://domain.ru - попадает на http://domain.ru/index.php
Набирает http://domain.ru/PARTITIONS/7654/USERLOG - попадает на http://domain.ru/index.php и + формируются 3 (до 4) переменные, например $_REQUEST['var1'] = 'PARTITIONS', $_REQUEST['var2'] = '7654', $_REQUEST['var3'] = 'USERLOG' - которые я обрабатываю в файле index.php корневого каталога.

То что надо смотреть дерективы mod_rewrite я понял. Весь день смотрю, но так ничего и не добился...

Как это будет выглядеть в .htaccess???
Ну, к примеру, так (только регэксп перепишите нормальный вместо (.*)):

RewriteEngine On
RewriteRule ^(.*)/(.*)/(.*)$ index.php?var1=$1&var2=$2&var3=$3
cпс. Тогда вопрос:

RewriteEngine On

RewriteRule ^(.*)/(.*)/(.*)/(.*)$ index.php?var1=$1&var2=$2&var3=$3&var4=$4
RewriteRule ^(.*)/(.*)/(.*)$ index.php?var1=$1&var2=$2&var3=$3
RewriteRule ^(.*)/(.*)$ index.php?var1=$1&var2=$2
RewriteRule ^(.*)$ index.php?var1=$1
RewriteRule ^$ index.php

будет работать? Или следует в обратном порядке написать?
а что мешает сделать ^(.*)$ index.php?input=$1 и разбор делать уже внутри скрипта?
Не работает ни так ни так... Пробовал...
Если что, я тестирую на http://vagrancy.ru
Там и текущий вид хтаксеса и переменные которые пытаюсь получить...
УРА!!!
Методом подтыка подобрал рабочий вариант:

RewriteEngine On

RewriteCond %{REQUEST_URI} ^(.+)/(.+)$
RewriteRule ^(.+)/(.+)$ index.php?var1=$1&var2=$2
Прикольно що «статье» уже 13 лет, она до сих пор вылезает в выдаче, но автор до сих пор её не привела в норм вид…

Интересно что ufo думает на сей счёт?
Прикольно что я получил уведомление о такой статье.
Only those users with full accounts are able to leave comments. Log in, please.