我想将所有请求重定向到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,我的脚本执行得很好。
我做错了什么?
答案 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
,而是在第一次重定向上设置环境变量。如果设置了该变量,我就不再进行重定向,从而摆脱原本会发生的无限循环。