修复在 PHP 8 环境下开启 IIS Chinese Tag Permalink 后网站 500 的问题

这个问题搞了我两个小时,我头快晕死了。

趁着改网站首页的时间,把服务端博客平台升级了一下,现在博客是最新版WordPress 5.9.3 + PHP 8.1的环境。

一开始换上新的PHP环境时,点开博客直接500。

在这期间,肯定还是解决了一些问题的,多少都是修改配置就能解决,然而,还是遇到了一个比较奇葩又难搞的问题。

具体表现是其它的php页面能访问,唯独WordPress不能进,直接报500错误,这还不是最主要的,问题是我连错误都不知道在哪找,哪怕我在IIS里开启了log模式,PHP的配置文件打开错误记录,什么都抓不到。

正当我头疼棘手的时候,我想起来WordPress自带debug功能。

可以,我觉得非常好,打开后:

果然,是兼容性问题,禁用这个插件网站就不崩溃了,但是这个插件可是IIS平台必备(没错我就是不喜欢服务端用Linux)

我拿着这个错误代码在网上查资料,没有相关的记载,可能是因为PHP版本太新了,而且官方文档里也没有提到7.x和8.x之间PATH_INFO的用法差异。就因为找这个资料,花了我两个多小时!!

我百思不得其解,打算直接进PHP示例页面去找。

!!!

我被你折磨得好惨呐..

(我姑且这样认为)PHP 8在IIS里已经不支持PATH_INFO的获取了,因此只有ORIG_PATH_INFO的存在,那我该怎么办呢?现有的这个变量获取到的地址是包含index.php的。

没关系,聪明的你一定用过URL重写的对吗?如果你正确配置了URL重写, 实际上是可以规避这个问题的,它获取到的参数仍然跟PATH_INFO相同。

因此,我们只需要对这个插件做个修改,加个判断参数。

// iis encode the url with GBK,but wordpress with utf-8
function bossma_get_urf8_pathandurl() {

//在这里加上判断参数,如果未获取到PATH_INFO,则用ORIG_PATH_INFO代替
    if ( !isset($_SERVER['PATH_INFO']) && isset($_SERVER['ORIG_PATH_INFO']) )
        $_SERVER['PATH_INFO'] = $_SERVER['ORIG_PATH_INFO'];
    $_SERVER['PATH_INFO']=iconv("GBK","UTF-8",$_SERVER['PATH_INFO']);
    $_SERVER['REQUEST_URI']=iconv("GBK","UTF-8",$_SERVER['REQUEST_URI']);
}

完成,不再报错了!带中文链接的页面也能正常访问。

暂无评论

发送评论 编辑评论

分享你的想法!评论时请如实在信息框填写个人信息
文明上网理性发言,请遵守相关法律法规,发表评论将会在站长审核通过后出现在评论列表中

|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇