2016-01-13 93 views
0

我有不允许的PHP脚本文件夹中的一个htaccess规则:htaccess的FilesMatch否认,但允许特定的文件后

<FilesMatch "\.(?i:php)$"> 
    <IfModule !mod_authz_core.c> 
    Order allow,deny 
    Deny from all 
    </IfModule> 
    <IfModule mod_authz_core.c> 
    Require all denied 
    </IfModule> 
</FilesMatch> 

这工作得很好。问题是有一个特定的PHP脚本,我希望能够调用(通过ajax),所以我想添加另一个规则后拒绝说,但如果它是这个特定的文件,然后允许它。我已经与该文件所在的是这样的文件夹中的其他htaccess中成功地做到了这一点:

<Files ajax_file.php> 
    <IfModule !mod_authz_core.c> 
     Order allow,deny 
     Allow from all 
    </IfModule> 
    <IfModule mod_authz_core.c> 
     Require all granted 
    </IfModule> 
</Files> 

我遇到的问题是,我要授予来自同一htaccess的作为一个单一的文件访问原始文件匹配,阻止所有.php文件。我似乎无法使它与添加文件路径一起工作,并且想知道是否有更好的方法来解决这个问题。有问题的文件会比拒绝php脚本的htaccess文件深一些。

回答

1

你使用哪个linux发行版?有一些htaccess配置器可以使配置这些文件变得更容易。你可以写这样的东西

require valid-user 

为每个获取访问权限的文件。

2

我认为mod_rewrite是解决您的问题的最佳解决方案。

RewriteEngine on 


# allow access to ajax_file.php 
RewriteCond %{THE_REQUEST} ajax_file\.php [NC] 
RewriteRule^- [NC,L] 

#disallow access to other php files 
RewriteCond %{THE_REQUEST} .+\.php [NC] 
RewriteRule^- [F,L] 
+0

这样做会允许我指定特定的ajax文件的路径吗?那理论上会允许任何名为ajax_file.php的文件正确吗?我特别希望只在/ folder1/folder2/folder3中找到ajax_file.php。它看起来像我可以做你上面描述的方式,但绝对不能具体的路径。 – Nick