Я не могу понять, почему этот RewriteCond вызывает каждый запрос для отправки в мое приложение FastCGI, когда оно фактически должно позволить Apache обслуживать статические ресурсы.
Я добавил файл hello.txt
в DocumentRoot для демонстрации.
Текстовый файл:
ls /Sites/CioccolataTest.webapp/Contents/Resources/static
hello.txt
VirtualHost и правила его перезаписи:
AppClass /Sites/CioccolataTest.webapp/Contents/MacOS/CioccolataTest -port 5065
FastCgiExternalServer /Sites/CioccolataTest.webapp/Contents/MacOS/CioccolataTest.fcgi -host 127.0.0.1:5065
<VirtualHost *:80>
ServerName cioccolata-test.webdev
DocumentRoot /Sites/CioccolataTest.webapp/Contents/Resources/static
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^/(.*)$ /Sites/CioccolataTest.webapp/Contents/MacOS/CioccolataTest.fcgi/$1 [QSA,L]
</VirtualHost>
Даже с параметром -f Apache направляет запросы для этого текстового файла (т. Е. Доступ http://cioccolata -test.webdev / hello.txt возвращает мое приложение, а не текстовый файл).
В качестве подтверждения концепции я изменил RewriteCond на:
RewriteCond %{REQUEST_URI} !^/hello.txt
Это заставило его корректно обслуживать текстовый файл и позволяло каждому другому запросу попадать в приложение FastCGI.
Почему не работает моя оригинальная версия? Мне нужно указать apache, чтобы каждый файл в DocumentRoot служил статическим ресурсом, но если файл не существует, он должен переписать запрос к моему приложению FastCGI.
ПРИМЕЧАНИЕ. Работающее приложение FastCGI имеет значение /Sites/CioccolataTest.webapp/Contents/MacOS/CioccolataTest
(без префикса .fcgi) ... Префикс .fcgi используется только для того, чтобы модуль fastcgi направил запрос в приложение.