Назад | Перейти на главную страницу

Перенаправлять каждый запрос в скрипт FastCGI

У меня есть сценарий 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 - это либо огромный беспорядок, либо намного выше моих возможностей.