我有一个 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 脚本呈现的页面。但如果我尝试任何其他页面,我就会收到来自阿帕奇,这意味着请求没有被重定向到我的 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 debug”获取回溯。
我该如何解决这个问题并正确地将每个请求重定向到我的 FastCGI 脚本?
答案1
我不明白为什么,但在我改变之后它就起作用了:
从
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 配置要么是一团糟,要么远远超出了我的理解能力。