公司有个WEBUI项目。就是通过AJAX发出一个接口请求。然后服务器返回结果(xml格式或txt格式)。但是接口是跨域请求的。所以通过perl封装成本地请求。
接口请求如下:
http://10.12.22.220/webui/webui_data.pl?a=tstatus&r=0.3372364002279937 /xml/tstatus.xml
http://10.12.22.220/webui/ipodwebui_data.pl?a=getvolume&r=0.10869605257175863 /xml/getvolume.xml
但是每次开发的时候,为了测试方便,也为了能够造假数据,写两个url,开发的时候用本地的文件,然后提交代码时,注释掉本地的,启用http。如下。
$.ajax({
url: " /xml/tstatus.xml",
//url:"http://10.12.22.220/webui/webui_data.pl?a=tstatus&r=0.3372364002279937",
dataType: "text",
async: false,
success: function(data){
makeLine(data,i);
}
});
后来,觉得这样很烦,每次提交代码时,都要进行注释反注释操作。有时这样的接口多了。还容易漏掉。很不方便。就想有没有这样的功能,还是用http,但是这个http指向本地xml文件。于是乎想到了apache的内部重定向。
规则如下:
首先所有的规则都包在<VirtualHost IP:PORT></VirtualHost>里面
如果没有参数的话,http://ip:port/cgi/recording/cgi_recording 在apache下的httpdocs下/xml/cgi_recording.xml
RewriteRule ^/cgi/recording/cgi_recording$ /xml/cgi_recording.xml
如果有参数的话,http://ip:port/webui/vislink.pl?a=tstatus&r=0.3372364002279937", /xml/tstatus.xml
RewriteCond %{QUERY_STRING} ^a=(.+)&r=(.+)$
RewriteRule ^/webui/webui_data.pl$ /xml/%1.xml?
访问前面的url就会跳转去访问后面的本地文件。
后面的文件随便动,这样可以随便造假数据。而且不再需要2个url,提交的时候不需要再做任何改动,直接提交了。
<VirtualHost 10.12.22.220:80>
RewriteEngine on
RewriteCond %{QUERY_STRING} ^a=getcfg&preset=(.+)$
RewriteRule ^/webui/vislink.pl$ /xml/%1.xml
RewriteCond %{QUERY_STRING} ^a=(.+)&ip=(.+)&port=(.+)&tid=(.+)&r=(.+)$
RewriteRule ^/webui/webui_data.pl$ /xml/toggleLive.xml
RewriteCond %{QUERY_STRING} ^a=(.+)&r=(.+)$
RewriteRule ^/webui/webui_data.pl$ /xml/%1.xml?
RewriteCond %{QUERY_STRING} ^a=(.+)&iface=wlan(.+)&r=(.+)$
RewriteRule ^/webui/ipodwebui_data.pl$ /xml/%1.xml?
RewriteCond %{QUERY_STRING} ^a=(.+)&r=(.+)$
RewriteRule ^/webui/ipodwebui_data.pl$ /xml/%1.xml?
RewriteRule ^/IPS/GetIpList$ /xml/getIpList.xml
RewriteRule ^/IPS/GetIndex$ /xml/getCurrentId.txt
RewriteRule ^/IPS/GetImage$ /xml/getImgList.xml
RewriteRule ^/IPS/SetSourceType*$ /xml/SetSourceType.xml
RewriteRule ^/IPS/Select$ /xml/success.xml
RewriteRule ^/IPS/GoHome$ /xml/GoHome.xml
RewriteRule ^/IPS/Replace$ /xml/replace.txt
RewriteRule ^/TOKEN/createtoken$ /tokenInfo/createtoken.txt
RewriteRule ^/TOKEN/gettokeninfo$ /tokenInfo/gettokeninfo.txt
RewriteRule ^/TOKEN/getservertoken$ /tokenInfo/getservertoken.txt
RewriteRule ^/TOKEN/token*$ /tokenInfo/getPwd.txt
RewriteRule ^/cgi/recording/cgi_recording_check$ /xml/cgi_recording_check.xml
RewriteRule ^/cgi/recording/cgi_recording$ /xml/cgi_recording.xml
</VirtualHost>