使用PHP检查AllowOverride值?

时间:2011-08-21 07:56:51

标签: php apache .htaccess

是否仍然使用PHP检查AllowOverride的值,看看.htaccess是否会产生任何影响?

3 个答案:

答案 0 :(得分:7)

我不知道干净,直接的方法。

如果您对要检查的文件夹有http访问权限,则可以在.htaccess文件中写入一些内容,以触发某种输出。

例如,你可以设置一个标题(虽然这对mod_headers有依赖性):

<FilesMatch "\.(php)$">
<IfModule mod_headers.c>
Header set htaccess_works "yes"
</IfModule>
</FilesMatch>

然后从PHP发出请求,并检查响应标头,例如使用curlCURLOPT_HEADER。如果它们包含htaccess_works标题,则可以正常工作。

另一种可怕但保证独立于特定Apache模块工作的方法是以编程方式将乱码写入.htaccess文件,然后生成如上所述的卷曲请求,并检查500状态代码。如果它抛出500,则解释.htaccess文件。但是如上所述,这很糟糕 - 如果可能的话,请改用header方法。

答案 1 :(得分:3)

补充@Pekka回复:

AllowOverride可以设置为全部,但也可以设置为特定的术语列表: AuthConfig FileInfo 索引限制选项。因此,您可以被允许使用Header指令,但不能使用Deny,例如。

因此,测试AllowOverride的实际价值的方法是将其添加到.htaccess:

#AuthConfig
AuthName "Secret"
#FileInfo
ErrorDocument 404 index.php
#Indexes
DefaultIcon /icon/unknown.xbm 
#Limit
Allow From All
#Options
Options FollowSymLinks

然后,如果您有500条错误注释行来检测哪些单词(部分)被禁止。在删除每条禁用指令之前,您将收到错误500。如果您知道允许的部分,则必须查看documentation以获取完整的允许说明列表。

如果您没有任何错误,您可以使用AllowOverride None或All。然后将拒绝/允许更改为:

Deny From All

如果你有403结果,那就是AllowOverride All。

答案 2 :(得分:1)

最简单的方式

添加:在页面的第一行显示错误,通过浏览器加载域以触发50x错误

  

另一种方法虽然糟糕但可以保证独立工作   从特定的Apache模块是以编程方式编写乱码   进入.htaccess文件,然后像上面那样发出一个卷曲请求   检查500状态代码。如果它抛出500,.htaccess文件   得到解释。但正如所说的那样,这很糟糕 - 如果可能的话,那就去吧   而不是header方法。