Назад | Перейти на главную страницу

Apache2 & .htaccess: Apache игнорирует AccessFile

Привет, вот моя конфигурация сервера:

ДЕБИАН 32 бит / PHP 5 / Apache

Версия сервера: Apache / 2.2.3 - Сервер построен: 22 марта 2008 г., 09:29:10

Файлы доступа:

grep -ni AccessFileName *

apache2.conf:134:AccessFileName .htaccess
apache2.conf:667:AccessFileName .httpdoverride

Все операторы AllowOverride в моей папке apache2 /.

mods-available/userdir.conf:6:                AllowOverride Indexes AuthConfig Limit
mods-available/userdir.conf:16:               AllowOverride FileInfo AuthConfig Limit
mods-enabled/userdir.conf:6:                AllowOverride Indexes AuthConfig Limit
mods-enabled/userdir.conf:16:               AllowOverride FileInfo AuthConfig Limit
sites-enabled/default:8:        AllowOverride All
sites-enabled/default:14:           AllowOverride All
sites-enabled/default:19:   AllowOverride All
sites-enabled/default:24:       AllowOverride All
sites-enabled/default:42:        AllowOverride All

Файл с поддержкой сайтов / по умолчанию:

  1 <VirtualHost *>
  2         ServerAdmin admin@site.com
  3         ServerName mysite.com
  4         ServerAlias mysite.com 
  5         DocumentRoot /var/www/mysite.com/
  6         <Directory />
  7                 Options FollowSymLinks
  8                 AllowOverride All
  9                 Order Deny,Allow
 10                 Deny from all
 11         </Directory>
 12         <Directory /var/www/mysite.com/>
 13                 Options Indexes FollowSymLinks MultiViews
 14                 AllowOverride All
 15                 Order allow,deny
 16                 allow from all
 17         </Directory>
 18         <Directory /var/www/mysite.com/test/>
 19         AllowOverride All
 20         </Directory>
 21 
 22         ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
 23         <Directory "/usr/lib/cgi-bin">
 24                 AllowOverride All
 25                 Options ExecCGI -MultiViews +SymLinksIfOwnerMatch
 26                 Order allow,deny
 27                 Allow from all
 28         </Directory>
 29 
 30         ErrorLog /var/log/apache2/error.log
 31 
 32         # Possible values include: debug, info, notice, warn, error, crit,
 33         # alert, emerg.
 34         LogLevel warn
 35 
 36         CustomLog /var/log/apache2/access.log combined
 37         ServerSignature Off
 38 
 39     Alias /doc/ "/usr/share/doc/"
 40     <Directory "/usr/share/doc/">
 41         Options Indexes MultiViews FollowSymLinks
 42         AllowOverride All
 43         Order deny,allow
 44         Deny from all
 45         Allow from 127.0.0.0/255.0.0.0 ::1/128
 46     </Directory>
 47 
 48 
 49 
 50 
 51 
 52 
 53 
 54 </VirtualHost>

Если я изменю любое значение Allow from all на Deny from all, оно будет работать всякий раз, когда я его поставлю.

У меня есть один .htaccess на /mysite.com/.htaccess и один на /mysite.com/test/.htaccess с:

Order Deny,Allow
Deny from all

Ни один из них не работает, я все еще вижу свой веб-сайт. У меня включен mod_rewrite, но я не думаю, что он здесь что-то делает.

Я пробовал почти все: / Он работает в моей локальной среде (MAMP), но не работает на моем сервере Debian.

Файлы .htaccess могут неочевидным образом взаимодействовать с основным конфигом. В вашем случае ваша проблема в том, что у вас есть бот для контроля доступа в вашем httpd.conf и вашем файле .htaccess. И они оба применяются.

У вас в конфиге:

Order allow,deny
allow from all

И в вашем файле .htaccess:

Order Deny,Allow
Deny from all

Таким образом, конечный результат такой, как если бы разрешения:

Order Deny, Allow
Deny From All
Allow From ALL

Это означает, что каждый получает доступ. В этом случае следует использовать «Разрешить заказ, запретить».

Однако вам не следует использовать файлы .htaccess вообще, если у вас есть доступ к основной конфигурации. Файлы .htaccess существуют как обходной путь для случаев, когда у вас нет права редактировать основную конфигурацию (например, общий хостинг), но если вы можете редактировать основную конфигурацию, вы должны использовать это.

Файлы .htaccess имеют ряд недостатков. Они читаются только во время запроса и только после того, как сервер переведет URL-адрес в ресурс файловой системы. Они не читаются при запуске сервера. Это означает, что файлы .htaccess, возможно, читаются при каждом запросе (что приводит к снижению производительности), но иногда не читаются никогда.

Я думаю, что когда вы используете deny from all в своем корневом каталоге, вы блокируете все, в том числе ваш localhost.
Вам нужно поместить localhost в свой корень.

<Directory /> 
Options FollowSymLinks
AllowOverride All  
Order deny,allow
Deny from all
Allow from 127.0.0.0/255.0.0.0 ::1/128
<Directory>

Затем перезагрузите и перезапустите apache:
/etc/init.d/apache2 перезагрузить
/etc/init.d/apache2 перезапуск

Для справки и производительности см. Документацию apache для htaccess и разрешение