Перейти к содержимому

 Друзья: Всё для вебмастера | [ Реклама на форуме ]


Rutor Rutor


Настройка .htaccess


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 21

#1
Sanglier

Sanglier

    Бит

  • Members
  • 2 сообщений
Для чего служит .htaccess?
  Как и любая программа, веб-сервер имеет определенные настройки. Но, у тебя, как пользователя Апача, скорее всего не будет, прав менять конфигурацию Апача через его главные файлы, действие которых распространяется на всех пользователей этого сервера. Но можно менять некоторые конфигурационные файлы, который распространяют свое действие только на твой сайт. Один из таких файлов - .htaccess
  Этот файл не доступен веб-пользователю из браузера. Если файл .htaccess расположен в корневой директории сервера, то его действия распространяется на весь сервер, кроме тех папок, где находится другой файл .htaccess (и кроме всех папок "ниже" этой папки со вторым .htaccess).
Пример, структура ваших директорий на сервере:

|-user
| |
|  -user1
|        |
|         -user2
|
|-data
| |
|  -data1
|      |
|       -data2
|

   Директории user1 и user2 будут вложенными по отношению к директории user. Если мы поместим в директорию www файл .htaccess, то его действие будет автоматически распространяться и на директории user1 и user2.


Примеры:

Как запретить веб-посетителям читать файлы в директории?

Запрет на все файлы:
deny from all
Где all обозначает "все".

Разрешить доступ с определенного ip:
order allow deny
deny from all
allow from <ваш ip>

В данном случае, <ваш ip> обозначает конкретный адрес.
Например:
order allow deny
deny from all
allow from 192.126.12.199

Запретить доступ с определенного ip:
order allow deny
deny from all
deny from <ваш ip>

Использование <ваш ip> аналогично для примера выше.

Запрет на группу файлов по маске:
<Files "\.(inc|sql|...другие расширения...)$">
order allow,deny
deny from all
</Files>

Определяет доступ к файлу по его расширению.
Например запрет на доступ к файлам с расширениям "inc" для веб-посетителей:
<Files "\.(inc)$">
order allow,deny
deny from all
</Files>

В данном примере сам веб-сервер Апач может обращаться к файлам с таким расширениям.

Запрет на конкретный файл:
Можно поставить запрет на конкретный файл по его названию и расширению.
<Files config.inc.php>
order allow,deny
deny from all
</Files>

В данном примере стоит запрет на обращения к файлу config.inc.php.

Пароль на директорию:
AuthName "Private zone"
AuthType Basic
AuthUserFile /pub/home/твой_логин/.htpasswd
require valid-user
</Files>

Значение AuthName будет выводиться для посетителя и может использоваться для пояснения запроса авторизации. Значение AuthUserFile указывает на место, где хранится файл с паролями для доступа к данной директории. Этот файл создается специальной утилитой htpasswd.exe.

Например в директории, которую защищаем паролем создаем такой .htaccess:
AuthName "For Registered Users Only"
AuthType Basic
AuthUserFile /pub/site.ru/.htpasswd
require valid-user
</Files>

В этом примере, посетитель при запросе директории, будет читать фразу "For Registered Users Only", файл с паролями для доступа должен лежать в директории /pub/site.ru/ и называться .htapasswd . Директория указывается от корня сервера, если вы неправильно зададите директорию, то Апач не сможет прочитать файл .htpasswd и никто не получит доступа к данной директории.

Пароль только на 1 файл:
Аналогично паролированию директории полностью, можно ставить пароль только на 1 файл.
Пример установки пароля на файл private.zip:
<Files private.zip>
AuthName "Users zone"
AuthType Basic
AuthUserFile /pub/home/твой_логин/.htpasswd
</Files>

Пароль на группу файлов:
Аналогично, используя <Files "\.(inc|sql|...другие расширения...)$">, можно ставить пароли по маске файлов.
Пример установки пароля на доступ ко всем файла с расширением "sql":
<Files "\.(sql)$">
AuthName "Users zone"
AuthType Basic
AuthUserFile /pub/home/твой_логин/.htpasswd
</Files>


Как сделать перенаправление (редирект) посетителя?
Редирект на другой url:
Что бы сделать перенаправления посетителя на сайт ]]>http://site.ru]]> в .htaccess

Redirect / ]]>http://www.site.ru]]>

Показ разных страниц, в зависимости от IP адреса посетителя:
SetEnvIf REMOTE_ADDR <нужный ip адрес> REDIR="redir"
RewriteCond %{REDIR} redir
RewriteRule ^/$ /another_page.html

Например, перенаправление посетителей с ip адресом 192.12.131.1 на страницу about_my_sity.html:

SetEnvIf REMOTE_ADDR 192.12.131.1 REDIR="redir"
RewriteCond %{REDIR} redir
RewriteRule ^/$ /about_my_sity.html

Перенаправление посетителя при запросе определенных страниц:

Это уже для всех сетевых вирусов и сканеров. Теперь любой запрос с адресом /_vti_bin будет автоматически перенаправляться на Microsoft:

redirect /_vti_bin ]]>http://www.microsoft.com]]>
redirect /scripts ]]>http://www.microsoft.com]]>
redirect /MSADC ]]>http://www.microsoft.com]]>
redirect /c ]]>http://www.microsoft.com]]>
redirect /d ]]>http://www.microsoft.com]]>
redirect /_mem_bin ]]>http://www.microsoft.com]]>
redirect /msadc ]]>http://www.microsoft.com]]>
RedirectMatch (.*)\cmd.exe$ ]]>http://www.microsoft.com$1]]>

Как сделать стартовой другую страницу?

Что бы поменять страницу, которая будет показываться при обращении к директории, пишем:

DirectoryIndex <нужная страница>

Можно указывать несколько страниц:

DirectoryIndex index.shtml index.php index.php3 index.html index.htm

Как заставить Апач обрабатывать SSI директивы?

SSI позволяют "собирать" страницу из кусочков. В одном кусочке у вас код меню, в другом код верхней части страницы, в третьем - нижней. А посетитель видет обычную страницу, которая состоит из того кода, который входит в ваши кусочки.
Необходимы обязательные установки в httpd.conf:
В блоке, начинающемся с <Directory/> и заканчивающийся </Directory> в строку Options Indexes добавьте Includes.

После, в файле .htaccess пишем:

AddHandler server-parsed .shtml .shtm .html .htm

Как заставить Апач выполнять в html документах php код?

Иногда бывает полезно "обмануть" посетителя, выдавая ему свои php-скрипты или иные файлы, как html файлы. Реально используется для индексации поисковой системой Rambler php-скриптов.

RemoveHandler .html .htm
AddType application/x-httpd-php .php .htm .html .phtml

При большой посещаемости сервера может вызвать тормоза.

Как самому обрабатывать ошибки Апача?

Наиболее интересные и полезные ошибки Апача это: 403-404, 500.
403
- пользователь не прошел аутентификацию, запрет на доступ (Forbided).
404 - запрашиваемый документ (файл, директория) не найден.
500 - внутренняя ошибка сервера (к примеру, ошибка в синтаксисе файла .htaccess).
Для того, что бы пользователю при этих ошибках были показаны ваши собственные сообщения об ошибках, в .htaccess пишем:

ErrorDocument 403 /errors/403.html
ErrorDocument 404 /errors/404.html
ErrorDocument 500 /errors/500.html

При этом при возникновении 404 ошибки пользователю загрузится файл errors/403.html

Удобно делать собственный обработчик на некоторые ошибки. В .htaccess пишем:
ErrorDocument 403 /errors/error.php?403
ErrorDocument 404 /errors/error.php?404
ErrorDocument 500 /errors/error.php?500

В error.php через $HTTP_SERVER_VARS['REQUEST_URI'] определяем какой документ вызвал ошибку и дальше обрабатываем. Если в .htaccess на ErrorDocument стоит указание файла с полным путем (]]>http://site.ru/error.php)]]>, то $HTTP_SERVER_VARS['REQUEST_URI'] будет содержать этот файл, а не вызвавший ошибку.
В Internet Explorer 5.0 неправильно обрабатывается файл, вызывающийся при ошибке, если его размер меньше 1 килобайта. Будет вызвана стандартная страница IE 404.

Как поставить запрет на отображение содержимого директории при отсутствии индексного файла?

Предположим, что у вас вся графика, используемая на сайте находится в директории img. Посетитель может набрать в адресной строке браузера эту директорию и увидеть список всех ваших графических файлов. Конечно, это не нанесет вам урона, но можно и не дать такого просмотра посетителю. В .htaccess пишем:

Options -Indexes


Можно ли указать кодировку на все файлы, в которой по умолчанию получает документы браузер?

На заре интернета и зарождения браузеров, часто была ситуация, что браузер не мог автоматически определить, в какой из русских кодировок написан документ и в браузер выдавалась какая-то каша. Для избежания этого указываем, что все отдаваемые страницы будут иметь кодировку windows-1251:

AddDefaultCharset windows-1251


Можно ли указать кодировку на загружаемые файлы?

При загрузке посетителем файла на сервер, возможна перекодировка его - указываем, что все получаемые файлы будут иметь кодировку windows-1251:

CharsetSourceEnc windows-1251

/////////////////////////////////////////////////////

и хватит  :innocent:
Надеюсь, инфа окажется полезной ))

#2
Black-Elf

Black-Elf

    Кидала

  • Banned
  • Pip
  • 111 сообщений
СПС Инфа очень полезна, для начинающих!!!За что и получаешь +1.

#3
Pasha

Pasha

    Бит

  • Members
  • 43 сообщений
мда, оч полезно для начинающих.
Главное все в одном месте!!!

#4
beep

beep

    Флудер )

  • Extended
  • PipPipPipPip
  • 623 сообщений
Хм, есть интересные моменты.
Но не нашел про RewriteEngine :)

#5
blaga

blaga

    Килобайт

  • Honourаble
  • PipPip
  • 189 сообщений
А почему это не в статьях, если сам писал?

#6
-Z-

-Z-

    Бит

  • Members
  • 11 сообщений
действительно полезная статья, только у меня вопрос почему апач установленный на винде не работает с .htaccess?

#7
$iD

$iD

    Админ

  • root
  • PipPipPipPipPipPip
  • 3785 сообщений
-Z-
что пишет?

#8
-Z-

-Z-

    Бит

  • Members
  • 11 сообщений
установил у себя на локалке ДЛЕ, так вот в нем и есть тот хтакцесс. Если убрать, то прекрасно все работает то есть индекс страница открывается, а если опять поставить в корень то вот что выдает:

Цитата

Internal Server Error
The server encountered an internal error or misconfiguration and was unable to complete your request.

Please contact the server administrator, @ and inform them of the time the error occurred, and anything you might have done that may have caused the error.

More information about this error may be available in the server error log.

И перед установкой ДЛЕ тоже удалил тот файл чтобы не мешал установливать мне

#9
FreeCat

FreeCat

    Invisible Admin

  • root
  • PipPipPipPipPip
  • 1236 сообщений
-Z-
Что в нём написано то)?

#10
-Z-

-Z-

    Бит

  • Members
  • 11 сообщений
написано что внутренняя ошибка, и что надо обратится к самому себе ))
а более подробно в логах искать. Логи копать чтоли?

#11
dkameleon

dkameleon

    Бит

  • Members
  • 5 сообщений
В конфиге апача для хтацесса должна быть включена директива
AllowOwerride All
иначе не заработает.

#12
FreeCat

FreeCat

    Invisible Admin

  • root
  • PipPipPipPipPip
  • 1236 сообщений

Просмотр сообщения-Z- (28.12.2007, 19:33) писал:

написано что внутренняя ошибка, и что надо обратится к самому себе ))
В .htaccess что написано  :) ???

#13
-Z-

-Z-

    Бит

  • Members
  • 11 сообщений
вот что написано

DirectoryIndex index.php

RewriteEngine On

# Редиректы
RewriteRule ^page/(.*)$ index.php?cstart=$1 [L]
# Сам пост
RewriteRule ^([0-9]{4})/([0-9]{2})/([0-9]{2})/page,([0-9]+),([0-9]+),(.*).html(/?)+$ index.php?subaction=showfull&year=$1&month=$2&day=$3&news_page=$4&cstart=$5&news_name=$6 [L]
RewriteRule ^([0-9]{4})/([0-9]{2})/([0-9]{2})/page,([0-9]+),(.*).html(/?)+$ index.php?subaction=showfull&year=$1&month=$2&day=$3&news_page=$4&news_name=$5 [L]
RewriteRule ^([0-9]{4})/([0-9]{2})/([0-9]{2})/print:page,([0-9]+),(.*).html(/?)+$ engine/print.php?subaction=showfull&year=$1&month=$2&day=$3&news_page=$4&news_name=$5 [L]
RewriteRule ^([0-9]{4})/([0-9]{2})/([0-9]{2})/(.*).html(/?)+$ index.php?subaction=showfull&year=$1&month=$2&day=$3&news_name=$4 [L]
# За день
RewriteRule ^([0-9]{4})/([0-9]{2})/([0-9]{2})(/?)+$ index.php?year=$1&month=$2&day=$3 [L]
RewriteRule ^([0-9]{4})/([0-9]{2})/([0-9]{2})/page/([0-9]+)(/?)+$ index.php?year=$1&month=$2&day=$3&cstart=$4 [L]
# За весь месяц
RewriteRule ^([0-9]{4})/([0-9]{2})(/?)+$ index.php?year=$1&month=$2 [L]
RewriteRule ^([0-9]{4})/([0-9]{2})/page/([0-9]+)(/?)+$ index.php?year=$1&month=$2&cstart=$3 [L]
# Вывод за весь год
RewriteRule ^([0-9]{4})(/?)+$ index.php?year=$1 [L]
RewriteRule ^([0-9]{4})/page/([0-9]+)(/?)+$ index.php?year=$1&cstart=$2 [L]
# вывод для отдельного юзера
RewriteRule ^user/([^/]*)(/?)+$ index.php?subaction=userinfo&user=$1 [L]
RewriteRule ^user/([^/]*)/page/([0-9]+)(/?)+$ index.php?subaction=userinfo&user=$1&cstart=$2 [L]
# вывод в виде каталога
RewriteRule ^catalog/([^/]*)(/?)+$ index.php?catalog=$1 [L]
RewriteRule ^catalog/([^/]*)/page/([0-9]+)(/?)+$ index.php?catalog=$1&cstart=$2 [L]
# вывод непрочитанных статей
RewriteRule ^newposts(/?)+$ index.php?subaction=newposts [L]
RewriteRule ^newposts/page/([0-9]+)(/?)+$ index.php?subaction=newposts&cstart=$1 [L]
# Статистические страницы
RewriteRule ^static/(.*).html(/?)+$ index.php?do=static&page=$1 [L]
# вывод избранных статей
RewriteRule ^favorites(/?)+$ index.php?do=favorites [L]
RewriteRule ^favorites/page/([0-9]+)(/?)+$ index.php?do=favorites&cstart=$1 [L]

RewriteRule ^statistics.html$ index.php?do=stats [L]
RewriteRule ^addnews.html$ index.php?do=addnews [L]
RewriteRule ^rss.xml$ engine/rss.php [L]
RewriteRule ^sitemap.xml$ uploads/sitemap.xml [L]

RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^.]+)/page/([0-9]+)(/?)+$ index.php?do=cat&category=$1&cstart=$2 [L]
RewriteRule ^([^.]+)/?$ index.php?do=cat&category=$1 [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^<]+)/rss.xml$ engine/rss.php?do=cat&category=$1 [L]
RewriteRule ^page,([0-9]+),([^/]+).html$ index.php?do=static&page=$2&news_page=$1 [L]
RewriteRule ^([^/]+).html$ index.php?do=static&page=$1 [L]


#14
axsew

axsew

    Бит

  • Members
  • 8 сообщений
mod-rewrite-wizard.com - сам сформирует, то что вам нужно!!!

#15
tema12

tema12

    Бит

  • Banned
  • 7 сообщений

Просмотр сообщенияdkameleon (29.12.2007, 0:35) писал:

В конфиге апача для хтацесса должна быть включена директива
AllowOwerride All
иначе не заработает.
хм а без ее включения никак?

#16
Graf_Drakula

Graf_Drakula

    Бит

  • Members
  • 39 сообщений
Еще используя этот файл ЧПУ можно сделать - весьма полезная штука.

#17
barmalini

barmalini

    Бит

  • Members
  • 5 сообщений
как?

#18
Nemo100

Nemo100

    Бит

  • Banned
  • 6 сообщений
Как запретить веб-посетителям читать файлы в директории?

#19
gtst

gtst

    Байт

  • Members
  • Pip
  • 69 сообщений

Просмотр сообщенияNemo100 (28.12.2008, 19:12) писал:

Как запретить веб-посетителям читать файлы в директории?



deny from all

#20
tigger09

tigger09

    Бит

  • Members
  • 12 сообщений

Просмотр сообщенияGraf_Drakula (18.11.2008, 22:52) писал:

Еще используя этот файл ЧПУ можно сделать - весьма полезная штука.
берем например строку из поста -Z-

Цитата

RewriteRule ^page,([0-9]+),([^/]+).html$ index.php?do=static&page=$2&news_page=$1 [L]
эта строка преобразует строку  ]]>http://your.site.ru/...mp;news_page=21]]> в строку ]]>http://your.site.ru/page/21/34]]>
Правильнее, конечно, было сказать наоборот: сервер апач при помощи этой строки в .htaccess преобразует входную строку ]]>http://your.site.ru/page/21/34]]> в строку для скрипта сайта ]]>http://your.site.ru/...mp;news_page=21]]>. Таким образом, без изменения скрипта сайта можно получить красивое ЧПУ на страницы.

#21
fixed

fixed

    Бит

  • Members
  • 15 сообщений
Спасибо

ErrorDocument 403 /errors/403.html
ErrorDocument 404 /errors/404.html
ErrorDocument 500 /errors/500.html

- наиболее актуальны

#22
akron

akron

    Байт

  • Members
  • Pip
  • 111 сообщений
]]>http://htaccesseditor.ru/]]>

Только, что установленный скриптик китайских разработчиков. Визуальный редактор htaccess.  немного позже сделаю на русском.
Я плохого не посоветую!


Количество пользователей, читающих эту тему: 0

0 пользователей, 0 гостей, 0 анонимных