У меня есть сценарий FastCGI, который я хочу, чтобы каждый запрос перенаправлялся на него, независимо от того, какой URL-адрес. Моя текущая конфигурация vhost следующая:
<VirtualHost *:80>
ServerName localhost
FastCGIExternalServer /var/www/localhost/cgi-bin/ws -host 127.0.0.1:2000
Alias / /var/www/localhost/cgi-bin/ws
DocumentRoot /var/www/localhost/cgi-bin/
<Directory /var/www/localhost/cgi-bin/>
SetHandler fastcgi-script
Options +ExecCGI
Options +FollowSymLinks
AllowOverride All
Order allow,deny
Allow from all
</Directory>
</VirtualHost>
Если я открою URL http://localhost
в моем браузере я успешно вижу страницу, созданную сценарием CGI. Но если я попробую любую другую страницу, я получу страницу с ошибкой 404 из Apache, что означает, что запрос не был перенаправлен на мой сценарий CGI.
Я добавил следующее .htaccess
файл внутри /var/www/localhost/cgi-bin/
со следующими mod_rewrite
правила:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteCond %{REQUEST_URI}::$1 ^(/.+)(.+)::$
RewriteRule ^(.*)$ - [E=BASE:%1]
RewriteRule ^(.*)$ %{ENV:BASE}wc [NC,L]
Но теперь все, что у меня есть, это страница ошибки Apache 500 и предупреждение в журналах Apache с сообщением:
Запрос превысил лимит в 10 внутренних перенаправлений из-за возможной ошибки конфигурации. При необходимости используйте LimitInternalRecursion, чтобы увеличить лимит. Используйте «Отладка LogLevel», чтобы получить обратную трассировку.
Как я могу решить эту проблему и правильно перенаправить каждый запрос на мой скрипт FastCGI?
Не понимаю почему, но это сработало после того, как я изменился:
из
Alias / /var/www/localhost/cgi-bin/ws
к
Alias / /var/www/localhost/cgi-bin/
Кроме того, я очистил свой .htaccess
просто, чтобы сделать вещи более красивыми (удалена проверка существующих файлов и каталогов):
RewriteCond %{REQUEST_URI}::$1 ^(/.+)(.+)::$
RewriteRule ^(.*)$ - [E=BASE:%1]
RewriteRule ^(.*)$ %{ENV:BASE}wc [NC,L]
Если кто-то понимает, почему это сработало, объясните, пожалуйста, в комментариях или где-нибудь еще. Я искренне думаю, что конфигурация Apache - это либо огромный беспорядок, либо намного выше моих возможностей.