.htaccess将所有请求重定向到perl文件

时间:2016-01-20 17:10:32

标签: .htaccess

我想将所有请求重定向到perl文件,该文件应根据子域处理它们。

我尝试使用此.htaccess:

Options +ExecCGI
AddHandler fcgid-script .pl
RewriteEngine On

RewriteCond %{HTTP_HOST} ^(.+?)\.example\.com$
RewriteRule ^(.*)$ /%1/main.pl/$1 [L]

我希望如果我尝试打开master.example.com,我的〜/ html-root / master / main.pl会被执行,但我会得到一个"内部服务器错误"

Apache的error_log说

[Wed Jan 20 18:06:36 2016] [error] [client xxx.xxx.xxx.xxx] Request exceeded the limit of 10 internal redirects due to probable configuration error. Use 'LimitInternalRecursion' to increase the limit if necessary. Use 'LogLevel debug' to get a backtrace., referer: http://master.example.com/

如果我尝试访问example.com/master/main.pl,我的脚本执行得很好。

我做错了什么?

2 个答案:

答案 0 :(得分:1)

以这种方式尝试你的规则,

Options +ExecCGI
AddHandler fcgid-script .pl
RewriteEngine On
RewriteCond %{HTTP_HOST} ^(.+?)\.example\.com$
RewriteCond %1::%{REQUEST_URI} !^(.*?)::/\1/? [NC]
RewriteRule ^(.*)$ /%1/main.pl/$1 [L]

答案 1 :(得分:0)

我找到了一种解决方法:

Options +ExecCGI
AddHandler fcgid-script .pl
RewriteEngine On

RewriteCond %{ENV:REDIRECT_ENV} !^.+$
RewriteCond %{HTTP_HOST} ^(.+?)\.example\.com$
RewriteRule ^(.*)$ /%1/main.pl/$1 [L,E=ENV:%1]

我没有将请求重定向到/\1/main.pl,而是在第一次重定向上设置环境变量。如果设置了该变量,我就不再进行重定向,从而摆脱原本会发生的无限循环。