很久没用iis,一个很古老的网站,不想装ISAPI_REWRITE组件。
在翻译重写的时候。发现站点编码是gbk,url中带有gbk的urlencode编码,重写后,这个编码打印出来是乱码。

于是脑子里依稀记得iis强大的rewrite功能有一个不解码的header参数。
翻一下iis列出的条件列表,找到{UNENCODED_URL},就是它了

于是改一下,使用条件匹配获取
相应的{R:1}……改为{C:1}……

1583432651754.jpg

不会c++,编译走了些弯路,上次编译成功,这次升级新版本又不行了。还是要记下来

1.下载pjproject: https://www.pjsip.org/download.htm1

2.把microsip放到pjproject项目下。作为这个项目的子项目。
分析方法
1)打开microsip.vcxproj项目
2)在项目上右键=>属性=>c/c++=>附加包含目录如图,可以看到很多文件夹属于pjproject的目录,于是推断microsip放在此目录下

3.修改项目属性“常规”=>“平台工具集”为当前安装的编译平台(x86,x64根据目标运行平台修改)

4.此时编译会出现,错误 LNK1104 无法打开文件“vpxmt.lib” 等文件
复制从网上之前找到的vpxmt.lib和opus.lib到pjproject的lib目录

5.再次编译,出现 错误 LNK1104 无法打开文件“libpjproject-x86_64-x64-vc14-Debug-Static.lib”
解决办法:pjproject的lib目录找到libpjproject-xxxxx对应文件(对应平台,当前名为libpjproject-x86_64-x64-vc14-Debug.lib)修改,为libpjproject-x86_64-x64-vc14-Debug-Static.lib

如果编译release版本,可以把这个对应文件复制,然后修改为libpjproject-x86_64-x64-vc14-release-Static.lib(报错会指出文件名)

6.此时会报一大堆错误
这应该是在之前参考网上关掉了pjproject的视频功能,造成视频相关的函数没有编译进去的原因。
LNK2019 无法解析的外部符号 pjsua_vid_win_set_size,该符号在函数 "public: void __cdecl Preview::Start(int)" (?Start@Preview@@QEAAXH@Z) 中被引用

解决办法:打开microsip的const.h,注释掉//#define _GLOBAL_VIDEO

参考资料:
https://blog.csdn.net/sunxiaopengsun/article/details/53924247
MicroSIP编译完全手册

从github上偷来的代码
https://gist.github.com/codler/3906826

# Nginx don't have PATH_INFO
if (!isset($_SERVER['PATH_INFO'])) {
    $_SERVER['PATH_INFO'] = substr($_SERVER["ORIG_SCRIPT_FILENAME"], strlen($_SERVER["SCRIPT_FILENAME"]));
}

$request = substr($_SERVER['PATH_INFO'], 1);
$file = $request;
$fp = @fopen($file, 'rb');

$size   = filesize($file); // File size
$length = $size;           // Content length
$start  = 0;               // Start byte
$end    = $size - 1;       // End byte

header('Content-type: video/mp4');
header("Accept-Ranges: 0-$length");
if (isset($_SERVER['HTTP_RANGE'])) {

    $c_start = $start;
    $c_end   = $end;

    list(, $range) = explode('=', $_SERVER['HTTP_RANGE'], 2);
    if (strpos($range, ',') !== false) {
        header('HTTP/1.1 416 Requested Range Not Satisfiable');
        header("Content-Range: bytes $start-$end/$size");
        exit;
    }
    if ($range == '-') {
        $c_start = $size - substr($range, 1);
    }else{
        $range  = explode('-', $range);
        $c_start = $range[0];
        $c_end   = (isset($range[1]) && is_numeric($range[1])) ? $range[1] : $size;
    }
    $c_end = ($c_end > $end) ? $end : $c_end;
    if ($c_start > $c_end || $c_start > $size - 1 || $c_end >= $size) {
        header('HTTP/1.1 416 Requested Range Not Satisfiable');
        header("Content-Range: bytes $start-$end/$size");
        exit;
    }
    $start  = $c_start;
    $end    = $c_end;
    $length = $end - $start + 1;
    fseek($fp, $start);
    header('HTTP/1.1 206 Partial Content');
}

header("Content-Range: bytes $start-$end/$size");
header("Content-Length: ".$length);


$buffer = 1024 * 8;
while(!feof($fp) && ($p = ftell($fp)) <= $end) {

    if ($p + $buffer > $end) {
        $buffer = $end - $p + 1;
    }
    set_time_limit(0);
    echo fread($fp, $buffer);
    flush();
}

fclose($fp);
exit();

说明:运行完成,会生成一个删除原有触发器,生成新的触发器的sql,方便选择性的运行

delimiter ////

        set @definner = 'root@127.0.0.1';

        SET SESSION group_concat_max_len = 100000000000;

        select group_concat(
                                        CONCAT('use ',dbname,char(10),'#######No.',(@rowNum:=@rowNum+1),',old definner=',obj_defer,',new definner=',@definner,'#######',char(10),'delimiter ****',char(10),
                                                                        'DROP TRIGGER if exists `',trig_name,'`;',char(10),
                                                                        'CREATE DEFINER=',@definner ,' TRIGGER `',trig_name,'` ',timing,' ',evnt,' ON `',tb_name,'`',char(10),
                                                                        'FOR EACH ROW',char(10),
                                                                        sql_body,';',char(10),
                                                                        '****',char(10),
                                                                        'delimiter ;',char(10),char(10)
                                                        )
                        separator '')
                                                           as s from (
        select TRIGGER_SCHEMA as dbname,TRIGGER_NAME as trig_name,EVENT_MANIPULATION as evnt,EVENT_OBJECT_TABLE as tb_name,ACTION_STATEMENT as sql_body,ACTION_TIMING as timing,DEFINER as obj_defer from `information_schema`.`TRIGGERS`
        ,
        (Select (@rowNum :=0) ) b
        ) x
           where obj_defer !=@definner and obj_defer!=replace(@definner,'`','')
        
        into dumpfile '/user/tmp/aaa.sql';
        
////