Комментарии 29
Статьи не видно.
+2
Между метками надо ставить запятые. И статьи не видно пока...
0
Приведенный ниже код позволяет поисковым роботам (в данном случае, googlebot) просматривать страницу и делает так, чтобы я, с моего IP, мог входить на сайт без пароля, а мой клиент и посетители – по паролю. Также данным кодом разрешено проведение XHTML и CSS валидации! (w3.org)
Каждый образец кода скопирован с форума htaccessElite. Там же можно найти дополнительную информацию по каждому из образцов.
NB!: Большинство приведенных примеров можно использовать с директивой Files or Filesmatch, чтобы инструкции, содержащиеся в них, применялись только к конкретным файлам.
NB!: Инструкции, направленные на переопределение (rewrite) должны всегда предваряться следующими строками:
Чтобы присвоить файлу тип независимо от его имени или расширения
Чтобы переадресовать запросы, созданные не по https протоколу на https, и решить проблему необходимости повторной авторизации при использовании htpasswd
Редирект с битых ссылок, не вредящий SEO
Для одного удаленного файла
Для группы файлов типа
При смене доменного имени
Необязательное www в запросе
Убираем субдомен из строки запроса
Убираем субдомен из строки запроса
Перенаправление всех посетителей на другой сайт, за исключением одного IP (бывает полезно при веб-разработке)
Операции над переменными (mod_env)
Установка часового пояса сервера:
Установка email администратора сервера:
Выключение ServerSignature
Добавление языка и кодировки в заголовки без использования мета-тэгов
C использованием директивы Files
C использованием директивы FilesMatch (более предпочтительно)
Использование собственного файла php.ini с помощью mod_php или php, установленного как cgi
Статья на тему: Custom PHP.ini tips and tricks
Если php работает как модуль Apache (mod_php) в корневом файле .htaccess установите следующее:
Если php установлен как cgi, поместите Ваш файл php.ini в директорию, содержащую php, в описываемом случае /cgi-bin/, а в файл htaccess добавьте следующее:
Если cgi-php работет через оболочку (для FastCGI), необходимо в скрипте оболочки изменить
Безопасность папок: Удаление возможности исполнять скрипты
Это можно сделать несколькими способами. К примеру:
Таким образом Вы определите, что файлы с перечисленными расширениями попадают в сферу действия команды -ExecCGI, а значит и -FollowSymLinks
Разрешение только методов GET и PUT при обращении к серверу.
Обработка запроса / файла в зависимости от метода
Форсированная загрузка файла вместо отображения его содержимого прямо в браузере
А в HTML-коде достаточно поставить ссылку прямо на нужный файл.
Отображение исходного кода вместо выполнения скрипта
Если возникла необходимость отобразить файлы типа .pl, .py или .cgi в виде исходного кода, а не исполнять их как скрипты, создайте в папке, где они расположены, файл .htaccess, содержащий следующее:
Многократное увеличение скорости работы сайта при помощи кэширования!
Статья на тему: Speed Up Sites with htaccess Caching
Предотвращение кражи изображений и файлов
Замена стандартных сообщений об ошибке
NB!: Вы можете также использовать внешние ссылки, но не делайте внешних ссылок на Ваш собственный сайт, чтобы не вредить его продвижению в поисковых системах.
Операция аутентификации
Запрос пароля на один файл:
Защита паролем нескольких файлов:
Примеры использования директивы Allow:
Использование переменных окружения в зависимости от посетителя:
Блокирование доступа к файлам в определенные часы
Пример базового файла .htaccess
Автор пользуется им, когда начинает делать новый сайт. По мере работы, оттуда удаляются куски кода или снимаются комментарии.
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
+9
Ух, спасибо за статью!
0
Есть на эту тему довольно хороший мануальчик. Пользуйтесь.
+2
AuthName "Prompt"
AuthType Basic
AuthUserFile /home/askapache.com/.htpasswd
Require valid-user
Может кто подскажет как в таком случае реализовать log out? чтобы зайти под другим пользователем например. А то мы с коллегами собак ели-ели, душили-душили, но до сих пор не было найдено никакого workaround :)
0
Извините, конечно, но по-моему это просто ужасно.
Это не статья, а набор выжимок из разных источников, написанных в совершенно разном стиле, повторяющихся, не откомментированных, неверных в конце-концов.
Зачем это было написано здесь?
На любой вопрос по .htaccess давно и понятно отвечает гугл, нужно только правильно спросить.
Это не статья, а набор выжимок из разных источников, написанных в совершенно разном стиле, повторяющихся, не откомментированных, неверных в конце-концов.
Зачем это было написано здесь?
На любой вопрос по .htaccess давно и понятно отвечает гугл, нужно только правильно спросить.
0
Моего опыта пока не хватает, чтобы так это оценить. Для меня эта статья была отправной точкой практического применения .htaccess. Я писала в посте, что уровень здесь для начинающих, чтобы люди опытные могли этот пост просто пропустить. В статье есть ссылки для более углубленного изучения тех или иных вопросов (в оригинале их больше), но цель ее - не составление подробного мануала, а создание и минимальное объяснение "затравочного" файла .htaccess для создания сайтов.
0
Я и говорю, что не очень хорошую отправную точку вы себе выбрали.
С опытом придет, что гораздо плодотворнее зайти на официальный ресурс, зайти туда, где написано теми людьми, которые это создали, а не теми, у кого получилось это использовать. Именно получилось.
Например, сюда: http://httpd.apache.org/docs/2.0/howto/h…
А потом подняться на уровень выше, сюда: http://httpd.apache.org/docs/2.0/
И узнать, что оказывается разработчики заботятся о людях, использующих их продукт, и даже часть документации переведена на русский.
От себя лично, основываясь на богатом опыте, могу сказать, что умение читать и понимать документацию прежде всего на английском (а в последствии и на любом другом языке) — это основополагающий фактор в разработке программного обеспечения.
Надо только знать, где и как искать.
Посмотрите, в вашей «статье» даже примеры слизаны с оригинального мануала. Но это примеры (хорошие примеры) сверху приправлены толстым слоем индивидуального восприятия того человека, кто пытался писать документацию. Это восприятие зачастую изменяет, а порой и вообще перевирает факты.
Надеюсь, суть моего комментария понятна.
С опытом придет, что гораздо плодотворнее зайти на официальный ресурс, зайти туда, где написано теми людьми, которые это создали, а не теми, у кого получилось это использовать. Именно получилось.
Например, сюда: http://httpd.apache.org/docs/2.0/howto/h…
А потом подняться на уровень выше, сюда: http://httpd.apache.org/docs/2.0/
И узнать, что оказывается разработчики заботятся о людях, использующих их продукт, и даже часть документации переведена на русский.
От себя лично, основываясь на богатом опыте, могу сказать, что умение читать и понимать документацию прежде всего на английском (а в последствии и на любом другом языке) — это основополагающий фактор в разработке программного обеспечения.
Надо только знать, где и как искать.
Посмотрите, в вашей «статье» даже примеры слизаны с оригинального мануала. Но это примеры (хорошие примеры) сверху приправлены толстым слоем индивидуального восприятия того человека, кто пытался писать документацию. Это восприятие зачастую изменяет, а порой и вообще перевирает факты.
Надеюсь, суть моего комментария понятна.
0
Знающие люди, подскажите плиз, как же все-таки сделать множественные виртуальные субдомены с помощью mod_rewrite?
То есть чтобы запросы типа bazooka.example.com переписывались на http://www.example.com/?page=bazooka
Надо вроде как добавить server alias *.example.com, но почему-то это никак не хочет работать. Видимо, делаю что-то не так.
То есть чтобы запросы типа bazooka.example.com переписывались на http://www.example.com/?page=bazooka
Надо вроде как добавить server alias *.example.com, но почему-то это никак не хочет работать. Видимо, делаю что-то не так.
0
Я уже писал об этом как-то в комментариях.
0
Спасибо.
У меня вопрос, я все ни как не могу понять как сделать: задача - преобразовать ссылки типа
http://domain.ru/STRUCTURE/4523
к типу
http://domain.ru/index.php?action=structure&id=4523
Не подскажете как сделать???
У меня вопрос, я все ни как не могу понять как сделать: задача - преобразовать ссылки типа
http://domain.ru/STRUCTURE/4523
к типу
http://domain.ru/index.php?action=structure&id=4523
Не подскажете как сделать???
0
Google, mod_rewrite
0
Смотря чего Вы этим хотите добиться. Я никогда не встречала необходимости в таком преобразованиие, но всегда приходится делать наоборот. Чтобы сделать наоборот, используются директивы mod_rewrite, ну а чтобы сделать то, что Вам надо, достаточно в файле htaccess установить RewriteEngine Off. Только боюсь, что Вы не совсем правильно формулируете задачу.
0
Сейчас постараюсь описать.
Набирает кто-то в браузере: 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???
Набирает кто-то в браузере: 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???
0
Ну, к примеру, так (только регэксп перепишите нормальный вместо (.*)):
RewriteEngine On
RewriteRule ^(.*)/(.*)/(.*)$ index.php?var1=$1&var2=$2&var3=$3
RewriteEngine On
RewriteRule ^(.*)/(.*)/(.*)$ index.php?var1=$1&var2=$2&var3=$3
0
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
будет работать? Или следует в обратном порядке написать?
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
будет работать? Или следует в обратном порядке написать?
0
УРА!!!
Методом подтыка подобрал рабочий вариант:
RewriteEngine On
RewriteCond %{REQUEST_URI} ^(.+)/(.+)$
RewriteRule ^(.+)/(.+)$ index.php?var1=$1&var2=$2
Методом подтыка подобрал рабочий вариант:
RewriteEngine On
RewriteCond %{REQUEST_URI} ^(.+)/(.+)$
RewriteRule ^(.+)/(.+)$ index.php?var1=$1&var2=$2
0
Прикольно що «статье» уже 13 лет, она до сих пор вылезает в выдаче, но автор до сих пор её не привела в норм вид…
Интересно что ufo думает на сей счёт?
Интересно что ufo думает на сей счёт?
0
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Основы.htaccess на примерах