修复WordPress永久链接404方法页面导航出错问题
- http://witmax.cn/404.php/?404;http://witmax_cn:80/page/2
- http://witmax.cn/404.php/page/3?404;http://witmax_cn:80/page/2
- http://witmax.cn/page/1
- http://witmax.cn/page/3
WordPress使用404.php实现永久链接的方法请参考《WordPress永久链接在IIS下的实现》。
发现文章多于两页时,首页底部点击下一页(链接地址为http://witmax.cn/page/2),在第二页中上一页和下一页的地址都不正确了,分别是
显然是有问题,单击后结果也是不对的,变成显示首页了。正确的地址应该分别是
调试代码一级级跟踪导致以上问题的原因(追踪过程不罗列,涉及文件和函数较多),发现导航的URL输出与$_SERVER['REQUEST_URI']值有关,文章显示过程中该值发生了变化,而追踪后发现问题是$_SERVER['QUERY_STRING']和$_SERVER['SCRIPT_NAME']导致的(相关代码位于wp-settings.php文件80行附近,wordpress 2.8版本,其他版本请自行搜索)。
解决方法是增加如下两行代码:
$_SERVER['QUERY_STRING'] = ""; $_SERVER['SCRIPT_NAME'] = $_SERVER['PATH_INFO'];
如此,导航便正常了。
3.0.1中wp-settings找不到博主所说的代码,请问该怎么解决?
[回复]
晴枫 8月 31st, 2010 上午12:15 回复:
@瘦米中文, 文中修改的是wp2.8版本;应该是3.0代码位置做了调整,你可以把所有wp目录下和wp-include目录下的所有php文件打开来搜索一下
[回复]
为什么我修改完后,整个页面居左了,而不是居中…?帮我一下,谢谢..
[回复]
晴枫 7月 20th, 2010 下午1:07 回复:
@cwz, 猜测是程序有错,网页内容没有完全输出导致的
[回复]
我也碰到了这样的问题。我看了一下原本的wp-settings.php文件80行以后的代码是:
// Some IIS + PHP configurations puts the script-name in the path-info (No need to append it twice)
if ( isset($_SERVER[‘PATH_INFO’]) ) {
if ( $_SERVER[‘PATH_INFO’] == $_SERVER[‘SCRIPT_NAME’] )
$_SERVER[‘REQUEST_URI’] = $_SERVER[‘PATH_INFO’];
else
$_SERVER[‘REQUEST_URI’] = $_SERVER[‘SCRIPT_NAME’] . $_SERVER[‘PATH_INFO’];
}
// Append the query string if it exists and isn’t null
if (isset($_SERVER[‘QUERY_STRING’]) && !empty($_SERVER[‘QUERY_STRING’])) {
$_SERVER[‘REQUEST_URI’] .= ‘?’ . $_SERVER[‘QUERY_STRING’];
}
请问一下,要加入了你给出的这两行代码,具体应该加在那个语句后面呢?
谢谢!^_^
[回复]
晴枫 6月 6th, 2010 下午1:12 回复:
@小羊, 在用不到$_SERVER[‘QUERY_STRING’]值的地方之后加
参考http://witmax.cn/wordpress-permalink-with-iis.html
[回复]
小羊 6月 6th, 2010 下午7:06 回复:
@晴枫, 非常感谢晴枫,在你的指引之下,我的问题基本已经解决!
[回复]
我的在本地用wamp测试,发表文章后查看,提示404错误,博主指导下如何解决问题
[回复]
晴枫 5月 7th, 2010 下午8:39 回复:
@山寨笔记本, 可能是永久链接规则没效造成的,可在后台将永久链接设置改为默认试试看
[回复]
@孤毒老鼠
这个是,不过用着免费空间也就不想啥了,兵来将挡水来土掩
[回复]
还是Linux的主机用得爽啊~~
[回复]