只允许通过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]
谢谢,我完成了这个问题该效果。删除RewriteCond会导致服务器错误。 – ProfHase85 2013-05-14 07:51:38
修改了我的答案,以防止循环。也许这将工作。 – 2013-05-14 23:02:33
非常感谢,现在它工作。我只是不明白,为什么: 如果我删除'RewriteCond%{REQUEST_URI}!django \ .cgi [NC]'并调用任何url,则重写规则适用,并且应该按照mod_rewrite描述完成:“_ [...]如果模式匹配,mod_rewrite将检查规则条件,如果不存在,URL将被替换为一个新的字符串,由替换字符串构成,mod_rewrite继续下一个规则。请解释一下? – ProfHase85 2013-05-15 08:32:47