你好,这是我的服务器配置:
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 文档访问控制和授权