前几日给博客更换服务器,从原来的Linux服务器换为Windows平台下的IIS服务器,主页显示正常,次日发现日志和页面均不能正常显示。
后将永久链接(固定链接)改为默认格式“http://www.sunyundong.com/?p=123”,一切显示正常。谷歌了一下才知道是IIS服务器对WordPress支持不好的原因。
在网上找了很多相关的文章,大多是用404.php重新定位到正确的页面,试了几个404.php,最后选择了木公的404文件,通过他的另一篇日志还解决了IIS服务器对中文地址支持不好的问题,帮了自己很大的忙。在这里转载一下,希望能给更多同样问题的朋友带来方便。
404.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 <?php
header("HTTP/1.1 200 OK");
$ori_qs = strtolower($_SERVER['QUERY_STRING']);
$pattern = '/[^;]+;[^:]+:\/\/[^\/]+(\/[^\?]*)(?:\?(.*))?/i';
preg_match($pattern, $ori_qs, $matches);
$_SERVER['PATH_INFO'] = $matches[1] . '?' . $matches[2];
$_SERVER['REQUEST_URI'] = $_SERVER['PATH_INFO'];
$query_args = explode('&', $matches[2]);
unset($_GET);
foreach ($query_args as $arg)
{
$the_arg = explode('=', $arg);
$_GET[$the_arg[0]] = $the_arg[1];
}
include('index.php');
?>将该404.php上传到服务器根目录后,日志和页面就能正常访问了。(前提是在服务器端将错误页面选择为404.php,若无404.php选项,则将文件名改成与服务器对应的的php即可)
如果还不能访问,那可能是因为地址中包含中文,解决方法如下:
1.打开wp-includes/classes.php文件,找到如下代码:
1
2
3
4
5
6
7 if ( isset($_SERVER['PATH_INFO']) )
$pathinfo = $_SERVER['PATH_INFO'];
else
$pathinfo = '';
$pathinfo_array = explode('?', $pathinfo);
$pathinfo = str_replace("%", "%25", $pathinfo_array[0]);
$req_uri = $_SERVER['REQUEST_URI']将其修改为
1
2
3
4
5
6
7 if ( isset($_SERVER['PATH_INFO']) )
$pathinfo = iconv('GBK', 'UTF-8', $_SERVER['PATH_INFO']);
else
$pathinfo = '';
$pathinfo_array = explode('?', $pathinfo);
$pathinfo = str_replace("%", "%25", $pathinfo_array[0]);
$req_uri = iconv('GBK', 'UTF-8', $_SERVER['REQUEST_URI']);这样就支持中文地址了。
另外,我将以上工作做好之后,发现自己主题的404.php不能正常跳转了,换成默认主题就可以,很是奇怪。最后做了一下比较,发现自己主题的404.php开头多了这样一段代码
1 2 3 | <?php if (!empty($_SERVER['SCRIPT_FILENAME']) && '404.php' == basename($_SERVER['SCRIPT_FILENAME'])) die ('Please do not load this page directly. Thanks!'); ?> |
把她屏蔽掉了之后(或者干脆删掉)就能正确跳转到自己的404错误页面了。虽然不能完全理解这句话的意思,等以后换回Linux服务器在把他还原就是了~


后退
Void
Life
Earth
Wind « Default
Water
Fire
Light 