只允许通过CGI访问文件

问题描述:

我有一个工作的django.cgi文件,它允许提供内容。 从很多教程我得到了下面的片段我.htaccess文件:只允许通过CGI访问文件

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^(.*)$ django.cgi/$1 [QSA,L] 

这个片段可以查看在直接任意文件(而不必使用CGI脚本)。

我想禁止直接访问任何文件,以便只能将文件传递到除/ static目录中的所有文件之外的cgi脚本。我想:

order allow,deny 
deny from all 
<Files django.cgi> 
    order allow,deny 
    allow from all 
</Files> 

但是这种解决方案我可以叫www.mysite.com/django.cgi,而www.mysite.com是被禁止的。有没有适当的方式来传递任何东西到CGI脚本(除了静态文件夹)?

*编辑* 以任何理由,如果我放弃了的RewriteCond RewriteCond %{REQUEST_FILENAME} !-f,我得到一个500错误

尝试删除RewriteCond %{REQUEST_FILENAME} !-f

这个条件是从规则排除已存在的文件,应该只是这样的:

RewriteCond %{REQUEST_URI} !django\.cgi [NC] 
RewriteRule ^(.*)$ django.cgi/$1 [QSA,L] 
+0

谢谢,我完成了这个问题该效果。删除RewriteCond会导致服务器错误。 – ProfHase85 2013-05-14 07:51:38

+0

修改了我的答案,以防止循环。也许这将工作。 – 2013-05-14 23:02:33

+0

非常感谢,现在它工作。我只是不明白,为什么: 如果我删除'RewriteCond%{REQUEST_URI}!django \ .cgi [NC]'并调用任何url,则重写规则适用,并且应该按照mod_rewrite描述完成:“_ [...]如果模式匹配,mod_rewrite将检查规则条件,如果不存在,URL将被替换为一个新的字符串,由替换字符串构成,mod_rewrite继续下一个规则。请解释一下? – ProfHase85 2013-05-15 08:32:47