解决EMLOG5.0 IIS下中文标签伪静态无法正常访问。
本来一直用的LAMP组合,因为需要用WINDOWS平台,所以博客也跟着迁移了,新平台采用的WINDOWS 2003 IIS6 FASTCGI PHP5.2.17 MYSQL 5.1.69 ZEND. 不爽的是TMD伪静态有点问题,发现EMLOG程序中路由$_SERVER['REQUEST_URI'] 在此环境下总是无法正确获取到包含中文标签伪静态后的URL(如http://www.23to.com/tag/%E9%9B%A8%E7%94%B0这种格式,总是有问题,如果采用正常传参的形式就能得到),有人说编码转换,有人说IIS下获取不到,搜索一堆,全是抄来抄去的,没有点实质的,最后搞来搞去没想到好的办法。准备放弃的时候PRINT了一下$_SERVER,发现$_SERVER['HTTP_X_REWRITE_URL']这个完整的取到了伪静态后的中文URL,与是改了一下原代码。因为选择EMLOG时间不长,也没太有时间去读代码,怕改动了造成其它不良反应,故只小改了一下。
有遇到同样问题的可以参考一下。这里还是建议去LAMP下使用吧。
方法如下:
使用UTF8编辑器,编辑器有很多,就不说了,打开程序include\lib目录下的dispatcher.php
83行后面加上一行代码
public static function setPath(){ $path = ''; if (isset($_SERVER['REQUEST_URI'])){ $path = $_SERVER['REQUEST_URI'];
就在$path = $_SERVER['REQUEST_URI'];下面加入
if(stripos($path,"/tag/")!==false){$path = $_SERVER['HTTP_X_REWRITE_URL'];}
因为只有标签出现无法正常访问的情况,所以我这里只对路径中包含/tag/的URL起做用,最小化的改动了一下。其它采用中文URL伪静态的我想也一样的道理。因为我没遇到,就暂时不写了,谁有更好的办法也可以评一下。