2014-11-29 3 views
3

Почему это работает:Htaccess RewriteRule без RewriteCond не работает

Options +ExecCGI 
AddHandler fcgid-script .fcgi 
RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^(.*)$ /app.fcgi/$1 [L] 

Но если я отдаленней RewriteCond он не работает, и я получаю внутреннюю ошибку сервера.

Options +ExecCGI 
AddHandler fcgid-script .fcgi 
RewriteEngine On 
RewriteRule ^(.*)$ /app.fcgi/$1 [L] 

Если я изменяю RewriteCond, например. как это, он тоже не работает.

RewriteCond %{REQUEST_FILENAME} !-l 

Я хочу, чтобы перенаправить все запросы app.fcgi. Я не хочу, чтобы пользователь имел возможность напрямую обращаться к файлам.

Заранее благодарен!

ответ

3

Это дает вам внутреннюю ошибку сервера (500), потому что без RewriteCond ваш цикл бесконечно зацикливается.

Вы можете использовать это правило, чтобы предотвратить это:

Options +ExecCGI 
AddHandler fcgid-script .fcgi 
RewriteEngine On 
RewriteRule ^((?!app\.fcgi/).*)$ /app.fcgi/$1 [L,NC] 

(?!app\.fcgi/) является отрицательный предпросмотр, что предотвращает это правило перезаписи для выполнения, если запрос уже /app.fcgi/.

+1

Спасибо, это работает! Почему вы добавили флаг 'nocase' (' NC')? Это важно? – fnkr

+1

'NC' на самом деле неважно. Просто я использовал '(?! App \ .fcgi /)' в шаблоне, и вы также можете сопоставить '(?! APP \ .fcgi /)' например. – anubhava

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