2013-05-13 7 views
1

У меня есть рабочий файл django.cgi, который позволяет обслуживать контент. Из многих учебников я получил следующий фрагмент кода для моего .htaccess файла:разрешить доступ к файлам только через cgi

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

Этот фрагмент кода позволяет доступ ко всем файлам напрямую (без использования сценария CGI).

Я хотел бы запретить прямой доступ к любому файлу, чтобы передать файл только в cgi-скрипт, кроме всех файлов в каталоге/static. Я пробовал:

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 (кроме статической папки)?

* EDIT * какой-либо причине, если я уронить 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

+0

Изменен мой ответ, чтобы предотвратить циклы. Может быть, это сработает. –

+0

Большое спасибо, теперь это работает. Я просто не понимаю, почему: Если я удалю 'RewriteCond% {REQUEST_URI}! Django \ .cgi [NC]' и вызовет любой URL-адрес, применяется правило перезаписи, и к тому моменту оно должно завершиться в соответствии с описанием mod_rewrite: "_ [...] Если шаблон соответствует, mod_rewrite проверяет условия правила. Если ни один не присутствует, URL-адрес будет заменен новой строкой, построенной из строки Substitution, а mod_rewrite переходит к следующему правилу. «Не могли бы вы пожалуйста, объясните это? – ProfHase85

Смежные вопросы