我在禁止php脚本的文件夹中有一个htaccess规则:
NSManagedObjectContext *context = [(CategoriesAppDelegate*)[UIApplication sharedApplication].delegate managedObjectContext];
// First fetch
NSFetchRequest *fetch = [NSFetchRequest fetchRequestWithEntityName:@"Tbl_catalogPage"];
// fetch only object IDs
NSExpressionDescription *objIdED = [NSExpressionDescription new];
objIdED.expression = [NSExpression expressionForEvaluatedObject];
objIdED.name = @"objId";
objIdED.expressionResultType = NSObjectIDAttributeType;
[fetch setPropertiesToFetch:@[objIdED]];
// Group by "pageid"
[fetch setPropertiesToGroupBy:@[@"pageid"]];
// Dictionary result type required for Group By:
[fetch setResultType:NSDictionaryResultType];
NSError* error = nil;
NSArray *interimResults = [context executeFetchRequest:fetch error:&error];
// Convert the array of dictionaries into an array of NSManagedObjectIDs
NSArray *requiredObjectIDs = [interimResults valueForKey:@"objId"];
// Second fetch
NSFetchRequest *secondFetch = [NSFetchRequest fetchRequestWithEntityName:@"Tbl_catalogPage"];
// Fetch only the objects with the required objectIDs
secondFetch.predicate = [NSPredicate predicateWithFormat:@"SELF IN %@", requiredObjectIDs];
self.resultPageArray = [context executeFetchRequest:secondFetch error:&error];
NSLog(@"result array count %lu",(unsigned long)self.resultPageArray.count);
NSLog (@"names: %@",self.resultPageArray);
NSLog(@"result array values ");
这很好用。问题是我确实希望能够调用一个特定的PHP脚本(通过ajax),所以我想在拒绝之后添加另一个规则“但是如果它是这个特定的文件然后允许它”。我已成功完成此文件所在的文件夹中的其他htaccess文件,如下所示:
<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文件的原始FilesMatch相同的htaccess授予单个文件访问权限。我似乎无法通过添加文件路径使其工作,我想知道是否有更好的方法来解决这个问题。有问题的文件会比拒绝php脚本的htaccess文件更深入一些文件夹。
答案 0 :(得分: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]
答案 1 :(得分:1)
require valid-user
获取访问权限的每个文件。
答案 2 :(得分:1)
我可以看到这是一篇非常古老的文章,但是由于没有明显的答案,我想我会尽力解决这个问题。
您所需的代码应如下所示:
<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文件的访问,并将优先级设置为allow然后deny,以便我们以后可以覆盖deny。
然后允许访问特定的php文件,请使用以下代码:
<Files ajax_file.php>
<IfModule !mod_authz_core.c>
Allow from all
</IfModule>
<IfModule mod_authz_core.c>
Require all granted
</IfModule>
</Files>
我从您的OP中看到这与您自己的并没有什么不同,所以我只能假设通过重新添加Order声明,您会造成一些奇怪的事情,因为您已经在其中设置了优先级最初的[block all php]文件声明。