2013-05-13 173 views
1

我有一個工作的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錯誤

回答

1

嘗試刪除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

相關問題