Apache2 和 .htaccess:Apache 忽略 AccessFile

Apache2 和 .htaccess:Apache 忽略 AccessFile

你好,这是我的服务器配置:

DEBIAN 32 位 / PHP 5 / Apache

服务器版本:Apache/2.2.3 - 服务器建立时间:2008 年 3 月 22 日 09:29:10

访问文件:

grep -ni 访问文件名 *

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

我的 apache2/ 文件夹中的所有 AllowOverride 语句。

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

sites-enabled/default 文件:

  1 <VirtualHost *>
  2         ServerAdmin [email protected]
  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>

如果我更改“全部拒绝”中的“全部允许”项,则无论何时放置它,它都会起作用。

我在 /mysite.com/.htaccess 有一个 .htaccess,在 /mysite.com/test/.htaccess 有一个 .htaccess,其内容如下:

Order Deny,Allow
Deny from all

它们都不起作用,我仍然可以看到我的网站。我启用了 mod_rewrite,但我认为它在这里不起作用。

我几乎尝试了所有方法 :/ 它在我的本地环境(MAMP)上运行良好,但在我的 Debian 服务器上却失败了。

答案1

.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 文件可能在每次请求时都会被读取(导致性能下降),但有时根本不会读取。

答案2

我认为,当您在根目录中使用“deny from all”时,您就阻止了所有内容,包括本地主机。
您需要在根目录中放置 localhost allow。

<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 reload
/etc/init.d/apache2 restart

有关参考和性能,请查看 apache 文档访问控制授权

相关内容