<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="zh-Hans-CN">
	<id>https://wiki.doge24190.top/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Doge24190</id>
	<title>懒狗维基 - 用户贡献 [zh-cn]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.doge24190.top/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Doge24190"/>
	<link rel="alternate" type="text/html" href="https://wiki.doge24190.top/wiki/%E7%89%B9%E6%AE%8A:%E7%94%A8%E6%88%B7%E8%B4%A1%E7%8C%AE/Doge24190"/>
	<updated>2026-06-11T02:10:10Z</updated>
	<subtitle>用户贡献</subtitle>
	<generator>MediaWiki 1.45.3</generator>
	<entry>
		<id>https://wiki.doge24190.top/index.php?title=%E9%A6%96%E9%A1%B5&amp;diff=14</id>
		<title>首页</title>
		<link rel="alternate" type="text/html" href="https://wiki.doge24190.top/index.php?title=%E9%A6%96%E9%A1%B5&amp;diff=14"/>
		<updated>2026-06-10T22:15:10Z</updated>

		<summary type="html">&lt;p&gt;Doge24190：​/* 文章推荐 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
= 欢迎到来！ =&lt;br /&gt;
&lt;br /&gt;
== 关于我 ==&lt;br /&gt;
我是doge24190，本站的站长，也是合作写作网站小城的问候的创建者，一只苦逼学生狗，喜欢玩电子游戏（倒腾各种技术活大概率是为了更舒服的玩游戏233）以及各种杂七杂八的东西。偶尔会去写下维百。 你通常可以在以下这些地方找到我：&lt;br /&gt;
&lt;br /&gt;
* 维基百科&lt;br /&gt;
* Steam&lt;br /&gt;
* 小城的问候&lt;br /&gt;
* github&lt;br /&gt;
&lt;br /&gt;
== 关于本站 ==&lt;br /&gt;
这里是doge24190的私人博客，不知你想看点什么？&lt;br /&gt;
&lt;br /&gt;
本站部分页面有对应的英语版本，但可能非最新版本，需要修缮&lt;br /&gt;
&lt;br /&gt;
* 存档&lt;br /&gt;
* 小工具&lt;br /&gt;
* 音乐&lt;br /&gt;
* 病毒博物馆&lt;br /&gt;
* 壁纸推荐&lt;br /&gt;
&lt;br /&gt;
== 文章推荐 ==&lt;br /&gt;
&amp;lt;DPL&amp;gt;&lt;br /&gt;
category = 博客 | 技术博客&lt;br /&gt;
namespace = Main&lt;br /&gt;
ordermethod = firstedit&lt;br /&gt;
order = descending&lt;br /&gt;
redirects = exclude&lt;br /&gt;
count = 10&lt;br /&gt;
adduser = true&lt;br /&gt;
addeditdate = true&lt;br /&gt;
mode = userformat&lt;br /&gt;
format = {| class=&amp;quot;wikitable sortable&amp;quot;\n! 标题\n! 作者\n! 创建时间,\n|-\n| [[%PAGE%]]\n| %USER%\n| %DATE%,,\n|}&lt;br /&gt;
&amp;lt;/DPL&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 入门 ==&lt;br /&gt;
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings MediaWiki配置设置列表]&lt;br /&gt;
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ/zh-hans MediaWiki常见问题]&lt;br /&gt;
* [https://lists.wikimedia.org/postorius/lists/mediawiki-announce.lists.wikimedia.org/ MediaWiki发布邮件列表]&lt;br /&gt;
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources 本地化MediaWiki到您的语言]&lt;br /&gt;
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam 了解如何在您的wiki上打击破坏]&lt;/div&gt;</summary>
		<author><name>Doge24190</name></author>
	</entry>
	<entry>
		<id>https://wiki.doge24190.top/index.php?title=%E9%A6%96%E9%A1%B5&amp;diff=13</id>
		<title>首页</title>
		<link rel="alternate" type="text/html" href="https://wiki.doge24190.top/index.php?title=%E9%A6%96%E9%A1%B5&amp;diff=13"/>
		<updated>2026-06-10T22:09:19Z</updated>

		<summary type="html">&lt;p&gt;Doge24190：​/* 文章推荐 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
= 欢迎到来！ =&lt;br /&gt;
&lt;br /&gt;
== 关于我 ==&lt;br /&gt;
我是doge24190，本站的站长，也是合作写作网站小城的问候的创建者，一只苦逼学生狗，喜欢玩电子游戏（倒腾各种技术活大概率是为了更舒服的玩游戏233）以及各种杂七杂八的东西。偶尔会去写下维百。 你通常可以在以下这些地方找到我：&lt;br /&gt;
&lt;br /&gt;
* 维基百科&lt;br /&gt;
* Steam&lt;br /&gt;
* 小城的问候&lt;br /&gt;
* github&lt;br /&gt;
&lt;br /&gt;
== 关于本站 ==&lt;br /&gt;
这里是doge24190的私人博客，不知你想看点什么？&lt;br /&gt;
&lt;br /&gt;
本站部分页面有对应的英语版本，但可能非最新版本，需要修缮&lt;br /&gt;
&lt;br /&gt;
* 存档&lt;br /&gt;
* 小工具&lt;br /&gt;
* 音乐&lt;br /&gt;
* 病毒博物馆&lt;br /&gt;
* 壁纸推荐&lt;br /&gt;
&lt;br /&gt;
== 文章推荐 ==&lt;br /&gt;
&amp;lt;DPL&amp;gt;&lt;br /&gt;
category = 博客｜技术博客&lt;br /&gt;
namespace = Main&lt;br /&gt;
ordermethod = firstedit&lt;br /&gt;
order = descending&lt;br /&gt;
redirects = exclude&lt;br /&gt;
count = 10&lt;br /&gt;
adduser = true&lt;br /&gt;
addeditdate = true&lt;br /&gt;
mode = userformat&lt;br /&gt;
listseparators = {| class=&amp;quot;wikitable sortable&amp;quot;\n! 标题\n! 作者\n! 创建时间\n|-,\n| [[%PAGE%]]\n| %USER%\n| %DATE%\n|-,\n|}&lt;br /&gt;
&amp;lt;/DPL&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 入门 ==&lt;br /&gt;
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings MediaWiki配置设置列表]&lt;br /&gt;
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ/zh-hans MediaWiki常见问题]&lt;br /&gt;
* [https://lists.wikimedia.org/postorius/lists/mediawiki-announce.lists.wikimedia.org/ MediaWiki发布邮件列表]&lt;br /&gt;
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources 本地化MediaWiki到您的语言]&lt;br /&gt;
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam 了解如何在您的wiki上打击破坏]&lt;/div&gt;</summary>
		<author><name>Doge24190</name></author>
	</entry>
	<entry>
		<id>https://wiki.doge24190.top/index.php?title=%E9%A6%96%E9%A1%B5&amp;diff=12</id>
		<title>首页</title>
		<link rel="alternate" type="text/html" href="https://wiki.doge24190.top/index.php?title=%E9%A6%96%E9%A1%B5&amp;diff=12"/>
		<updated>2026-06-10T22:06:09Z</updated>

		<summary type="html">&lt;p&gt;Doge24190：​/* 文章推荐 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
= 欢迎到来！ =&lt;br /&gt;
&lt;br /&gt;
== 关于我 ==&lt;br /&gt;
我是doge24190，本站的站长，也是合作写作网站小城的问候的创建者，一只苦逼学生狗，喜欢玩电子游戏（倒腾各种技术活大概率是为了更舒服的玩游戏233）以及各种杂七杂八的东西。偶尔会去写下维百。 你通常可以在以下这些地方找到我：&lt;br /&gt;
&lt;br /&gt;
* 维基百科&lt;br /&gt;
* Steam&lt;br /&gt;
* 小城的问候&lt;br /&gt;
* github&lt;br /&gt;
&lt;br /&gt;
== 关于本站 ==&lt;br /&gt;
这里是doge24190的私人博客，不知你想看点什么？&lt;br /&gt;
&lt;br /&gt;
本站部分页面有对应的英语版本，但可能非最新版本，需要修缮&lt;br /&gt;
&lt;br /&gt;
* 存档&lt;br /&gt;
* 小工具&lt;br /&gt;
* 音乐&lt;br /&gt;
* 病毒博物馆&lt;br /&gt;
* 壁纸推荐&lt;br /&gt;
&lt;br /&gt;
== 文章推荐 ==&lt;br /&gt;
&amp;lt;DPL&amp;gt;&lt;br /&gt;
category = 博客&lt;br /&gt;
namespace = Main&lt;br /&gt;
ordermethod = firstedit&lt;br /&gt;
order = descending&lt;br /&gt;
redirects = exclude&lt;br /&gt;
count = 10&lt;br /&gt;
adduser = true&lt;br /&gt;
addeditdate = true&lt;br /&gt;
mode = userformat&lt;br /&gt;
listseparators = {| class=&amp;quot;wikitable sortable&amp;quot;\n! 标题\n! 作者\n! 创建时间\n|-,\n| [[%PAGE%]]\n| %USER%\n| %DATE%\n|-,\n|}&lt;br /&gt;
&amp;lt;/DPL&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 入门 ==&lt;br /&gt;
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings MediaWiki配置设置列表]&lt;br /&gt;
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ/zh-hans MediaWiki常见问题]&lt;br /&gt;
* [https://lists.wikimedia.org/postorius/lists/mediawiki-announce.lists.wikimedia.org/ MediaWiki发布邮件列表]&lt;br /&gt;
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources 本地化MediaWiki到您的语言]&lt;br /&gt;
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam 了解如何在您的wiki上打击破坏]&lt;/div&gt;</summary>
		<author><name>Doge24190</name></author>
	</entry>
	<entry>
		<id>https://wiki.doge24190.top/index.php?title=%E9%A6%96%E9%A1%B5&amp;diff=11</id>
		<title>首页</title>
		<link rel="alternate" type="text/html" href="https://wiki.doge24190.top/index.php?title=%E9%A6%96%E9%A1%B5&amp;diff=11"/>
		<updated>2026-06-10T22:05:16Z</updated>

		<summary type="html">&lt;p&gt;Doge24190：​/* 欢迎到来！ */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
= 欢迎到来！ =&lt;br /&gt;
&lt;br /&gt;
== 关于我 ==&lt;br /&gt;
我是doge24190，本站的站长，也是合作写作网站小城的问候的创建者，一只苦逼学生狗，喜欢玩电子游戏（倒腾各种技术活大概率是为了更舒服的玩游戏233）以及各种杂七杂八的东西。偶尔会去写下维百。 你通常可以在以下这些地方找到我：&lt;br /&gt;
&lt;br /&gt;
* 维基百科&lt;br /&gt;
* Steam&lt;br /&gt;
* 小城的问候&lt;br /&gt;
* github&lt;br /&gt;
&lt;br /&gt;
== 关于本站 ==&lt;br /&gt;
这里是doge24190的私人博客，不知你想看点什么？&lt;br /&gt;
&lt;br /&gt;
本站部分页面有对应的英语版本，但可能非最新版本，需要修缮&lt;br /&gt;
&lt;br /&gt;
* 存档&lt;br /&gt;
* 小工具&lt;br /&gt;
* 音乐&lt;br /&gt;
* 病毒博物馆&lt;br /&gt;
* 壁纸推荐&lt;br /&gt;
&lt;br /&gt;
== 文章推荐 ==&lt;br /&gt;
&amp;lt;DPL&amp;gt;&lt;br /&gt;
category = 博客&lt;br /&gt;
namespace = Main&lt;br /&gt;
ordermethod = created&lt;br /&gt;
order = descending&lt;br /&gt;
redirects = exclude&lt;br /&gt;
count = 10&lt;br /&gt;
adduser = true&lt;br /&gt;
addfirstcategorydate = false&lt;br /&gt;
addeditdate = false&lt;br /&gt;
addpagetoucheddate = false&lt;br /&gt;
mode = userformat&lt;br /&gt;
listseparators = {| class=&amp;quot;wikitable sortable&amp;quot;\n! 标题\n! 作者\n! 创建时间\n|-,\n| [[%PAGE%]]\n| %USER%\n| %DATE%\n|-,\n|}&lt;br /&gt;
&amp;lt;/DPL&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 入门 ==&lt;br /&gt;
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings MediaWiki配置设置列表]&lt;br /&gt;
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ/zh-hans MediaWiki常见问题]&lt;br /&gt;
* [https://lists.wikimedia.org/postorius/lists/mediawiki-announce.lists.wikimedia.org/ MediaWiki发布邮件列表]&lt;br /&gt;
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources 本地化MediaWiki到您的语言]&lt;br /&gt;
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam 了解如何在您的wiki上打击破坏]&lt;/div&gt;</summary>
		<author><name>Doge24190</name></author>
	</entry>
	<entry>
		<id>https://wiki.doge24190.top/index.php?title=MediaWiki%E9%A1%B5%E9%9D%A2%E6%98%BE%E7%A4%BANginx404&amp;diff=10</id>
		<title>MediaWiki页面显示Nginx404</title>
		<link rel="alternate" type="text/html" href="https://wiki.doge24190.top/index.php?title=MediaWiki%E9%A1%B5%E9%9D%A2%E6%98%BE%E7%A4%BANginx404&amp;diff=10"/>
		<updated>2026-06-10T22:02:17Z</updated>

		<summary type="html">&lt;p&gt;Doge24190：​&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= MediaWiki 页面显示 Nginx 404 的排查记录：error_page 404 导致的隐藏问题 =&lt;br /&gt;
&lt;br /&gt;
== 问题现象 ==&lt;br /&gt;
在安装并配置好 MediaWiki 后，首页可以正常打开，部分特殊页面也可以正常访问，例如：&lt;br /&gt;
 &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;https://wiki.example.com/index.php?title=特殊:上传文件&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
但是访问另一些页面时却出现 404，例如：&lt;br /&gt;
 &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;https://wiki.example.com/index.php?title=特殊:最近更改&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
以及访问尚未创建的普通页面时也会出现 404，例如：&lt;br /&gt;
 &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;https://wiki.example.com/index.php?title=Test&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
表面上看，问题似乎像是 MediaWiki 的特殊页面、本地化别名、URL 重写或 Nginx 伪静态规则出了问题。&lt;br /&gt;
&lt;br /&gt;
但进一步检查后发现，真正的问题并不是 MediaWiki 没有处理请求，而是 Nginx 把 MediaWiki 返回的应用内 404 页面覆盖掉了。&lt;br /&gt;
&lt;br /&gt;
== 排查过程 ==&lt;br /&gt;
首先使用 curl 测试英文特殊页面：&lt;br /&gt;
 &amp;lt;code&amp;gt;curl -I &amp;quot;&amp;lt;nowiki&amp;gt;https://wiki.example.com/index.php?title=Special:RecentChanges&amp;lt;/nowiki&amp;gt;&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
返回结果中可以看到，MediaWiki 实际上已经识别了这个特殊页面，并将其重定向到了中文特殊页名称：&lt;br /&gt;
 &amp;lt;code&amp;gt;HTTP/2 301&lt;br /&gt;
 location: &amp;lt;nowiki&amp;gt;https://wiki.example.com/index.php?title=%E7%89%B9%E6%AE%8A:%E6%9C%80%E8%BF%91%E6%9B%B4%E6%94%B9&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
这说明 MediaWiki 本身是工作的，&amp;lt;code&amp;gt;Special:RecentChanges&amp;lt;/code&amp;gt; 也能被识别。&lt;br /&gt;
&lt;br /&gt;
然后继续跟随跳转查看页面正文：&lt;br /&gt;
 &amp;lt;code&amp;gt;curl -L &amp;quot;&amp;lt;nowiki&amp;gt;https://wiki.example.com/index.php?title=Special:RecentChanges&amp;lt;/nowiki&amp;gt;&amp;quot; | head -n 50&amp;lt;/code&amp;gt;&lt;br /&gt;
返回内容却是：&lt;br /&gt;
 &amp;lt;code&amp;gt;&amp;lt;html&amp;gt;&lt;br /&gt;
 &amp;lt;head&amp;gt;&amp;lt;title&amp;gt;404 Not Found&amp;lt;/title&amp;gt;&amp;lt;/head&amp;gt;&lt;br /&gt;
 &amp;lt;body&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;center&amp;gt;&amp;lt;h1&amp;gt;404 Not Found&amp;lt;/h1&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;nowiki&amp;gt;&amp;lt;/center&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;hr&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;nowiki&amp;gt;&amp;lt;center&amp;gt;nginx&amp;lt;/center&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;/body&amp;gt;&lt;br /&gt;
 &amp;lt;/html&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
这里的关键点是：&lt;br /&gt;
 &amp;lt;code&amp;gt;nginx&amp;lt;/code&amp;gt;&lt;br /&gt;
如果是 MediaWiki 自己返回的页面，HTML 中通常会包含 MediaWiki 的页面结构、皮肤、站点标题等内容；而这里显示的是 Nginx 默认 404 页面。&lt;br /&gt;
&lt;br /&gt;
因此可以判断：这个 404 不是 MediaWiki 页面本身，而是被 Nginx 的错误页处理逻辑替换了。&lt;br /&gt;
&lt;br /&gt;
== 根本原因 ==&lt;br /&gt;
在宝塔面板生成的 Nginx 配置中，存在如下配置：&lt;br /&gt;
 &amp;lt;code&amp;gt;error_page 404 /404.html;&amp;lt;/code&amp;gt;&lt;br /&gt;
完整片段类似：&lt;br /&gt;
 &amp;lt;code&amp;gt;#ERROR-PAGE-START  错误页配置，可以注释、删除或修改&lt;br /&gt;
 error_page 404 /404.html;&lt;br /&gt;
 #error_page 502 /502.html;&lt;br /&gt;
 #ERROR-PAGE-END&amp;lt;/code&amp;gt;&lt;br /&gt;
这个配置的含义是：只要后端返回 HTTP 404，Nginx 就将页面替换为 &amp;lt;code&amp;gt;/404.html&amp;lt;/code&amp;gt;。&lt;br /&gt;
&lt;br /&gt;
这对于普通静态网站可能没问题，但对 MediaWiki 这类动态应用来说会造成误伤。&lt;br /&gt;
&lt;br /&gt;
MediaWiki 在很多情况下会主动返回 HTTP 404 状态码，但页面正文并不是错误，而是应用内的正常提示。例如：&lt;br /&gt;
&lt;br /&gt;
* 访问尚未创建的页面；&lt;br /&gt;
* 访问不存在的标题；&lt;br /&gt;
* 某些特殊页面或查询结果为空的页面；&lt;br /&gt;
* 需要由 MediaWiki 自己生成的“页面不存在，可创建此页面”提示。&lt;br /&gt;
&lt;br /&gt;
也就是说，对于 MediaWiki 来说，HTTP 404 并不一定代表 Nginx 层面的文件不存在。它可能只是 MediaWiki 用来表达“这个 wiki 页面尚未创建”的正常状态码。&lt;br /&gt;
&lt;br /&gt;
但是 Nginx 的：&lt;br /&gt;
 &amp;lt;code&amp;gt;error_page 404 /404.html;&amp;lt;/code&amp;gt;&lt;br /&gt;
会把 MediaWiki 自己生成的页面内容覆盖掉，最终用户看到的就不再是 MediaWiki 的提示，而是 Nginx 的：&lt;br /&gt;
 &amp;lt;code&amp;gt;404 Not Found&lt;br /&gt;
 nginx&amp;lt;/code&amp;gt;&lt;br /&gt;
这就是导致“未创建页面打不开”“部分特殊页面变成 404”的真正原因。&lt;br /&gt;
&lt;br /&gt;
== 解决方法 ==&lt;br /&gt;
编辑站点的 Nginx 配置文件，例如宝塔环境下通常位于：&lt;br /&gt;
 &amp;lt;code&amp;gt;/www/server/panel/vhost/nginx/wiki.example.com.conf&amp;lt;/code&amp;gt;&lt;br /&gt;
找到：&lt;br /&gt;
 &amp;lt;code&amp;gt;error_page 404 /404.html;&amp;lt;/code&amp;gt;&lt;br /&gt;
将其注释掉：&lt;br /&gt;
 &amp;lt;code&amp;gt;#error_page 404 /404.html;&amp;lt;/code&amp;gt;&lt;br /&gt;
修改后的配置应类似：&lt;br /&gt;
 &amp;lt;code&amp;gt;#ERROR-PAGE-START  错误页配置，可以注释、删除或修改&lt;br /&gt;
 #error_page 404 /404.html;&lt;br /&gt;
 #error_page 502 /502.html;&lt;br /&gt;
 #ERROR-PAGE-END&amp;lt;/code&amp;gt;&lt;br /&gt;
然后测试 Nginx 配置：&lt;br /&gt;
 &amp;lt;code&amp;gt;sudo nginx -t&amp;lt;/code&amp;gt;&lt;br /&gt;
如果显示配置正常，再重载 Nginx：&lt;br /&gt;
 &amp;lt;code&amp;gt;sudo systemctl reload nginx&amp;lt;/code&amp;gt;&lt;br /&gt;
宝塔环境也可以使用：&lt;br /&gt;
 &amp;lt;code&amp;gt;sudo /etc/init.d/nginx reload&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 修复后的效果 ==&lt;br /&gt;
修改后，再访问未创建页面：&lt;br /&gt;
 &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;https://wiki.example.com/index.php?title=Test&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
它可能仍然返回 HTTP 404 状态码，这是正常的，因为 &amp;lt;code&amp;gt;Test&amp;lt;/code&amp;gt; 页面确实尚未创建。&lt;br /&gt;
&lt;br /&gt;
但页面正文不应再是 Nginx 的：&lt;br /&gt;
 &amp;lt;code&amp;gt;404 Not Found&lt;br /&gt;
 nginx&amp;lt;/code&amp;gt;&lt;br /&gt;
而应该变成 MediaWiki 自己的提示页面，例如：&lt;br /&gt;
 &amp;lt;code&amp;gt;此页面目前没有内容。&lt;br /&gt;
 您可以搜索本页标题、在相关页面中搜索，或者创建此页面。&amp;lt;/code&amp;gt;&lt;br /&gt;
也就是说，判断问题是否修复，不能只看 HTTP 状态码是否为 404，而要看页面正文到底是 MediaWiki 生成的，还是 Nginx 生成的。&lt;br /&gt;
&lt;br /&gt;
可以用下面的命令检查：&lt;br /&gt;
 &amp;lt;code&amp;gt;curl -L &amp;quot;&amp;lt;nowiki&amp;gt;https://wiki.example.com/index.php?title=Test&amp;lt;/nowiki&amp;gt;&amp;quot; | head -n 30&amp;lt;/code&amp;gt;&lt;br /&gt;
如果输出中出现 MediaWiki 页面结构，说明已经正常。&lt;br /&gt;
&lt;br /&gt;
== 推荐的 MediaWiki Nginx 基础配置 ==&lt;br /&gt;
对于使用 &amp;lt;code&amp;gt;/index.php?title=页面名&amp;lt;/code&amp;gt; 这种默认 URL 形式的 MediaWiki 站点，可以保留简单的基础转发规则：&lt;br /&gt;
 &amp;lt;code&amp;gt;location / {&lt;br /&gt;
     try_files $uri $uri/ /index.php?$query_string;&lt;br /&gt;
 }&amp;lt;/code&amp;gt;&lt;br /&gt;
同时建议在 &amp;lt;code&amp;gt;LocalSettings.php&amp;lt;/code&amp;gt; 中明确使用保守的 URL 配置：&lt;br /&gt;
 &amp;lt;code&amp;gt;$wgScriptPath = &amp;quot;&amp;quot;;&lt;br /&gt;
 $wgArticlePath = &amp;quot;/index.php?title=$1&amp;quot;;&lt;br /&gt;
 $wgUsePathInfo = false;&lt;br /&gt;
 $wgServer = &amp;quot;&amp;lt;nowiki&amp;gt;https://wiki.example.com&amp;lt;/nowiki&amp;gt;&amp;quot;;&amp;lt;/code&amp;gt;&lt;br /&gt;
这样可以避免 MediaWiki 生成 &amp;lt;code&amp;gt;/index.php/PageName&amp;lt;/code&amp;gt; 或短链接形式的路径，从而减少和 Nginx URL 重写规则冲突的概率。&lt;br /&gt;
&lt;br /&gt;
== 关于未创建页面的 404 状态码 ==&lt;br /&gt;
需要特别注意：MediaWiki 中访问未创建页面返回 HTTP 404 是正常行为。&lt;br /&gt;
&lt;br /&gt;
例如：&lt;br /&gt;
 &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;https://wiki.example.com/index.php?title=Test&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
如果 &amp;lt;code&amp;gt;Test&amp;lt;/code&amp;gt; 页面尚未创建，MediaWiki 可以返回 404 状态码，同时显示“页面不存在，可创建此页面”的提示。&lt;br /&gt;
&lt;br /&gt;
因此，排查时不能简单认为：&lt;br /&gt;
 &amp;lt;code&amp;gt;HTTP 404 = Nginx 配置错误&amp;lt;/code&amp;gt;&lt;br /&gt;
更准确的判断方式是：&lt;br /&gt;
&lt;br /&gt;
* 如果页面正文是 MediaWiki 风格的“页面不存在”提示，说明正常；&lt;br /&gt;
* 如果页面正文是 &amp;lt;code&amp;gt;404 Not Found nginx&amp;lt;/code&amp;gt;，说明被 Nginx 错误页覆盖了；&lt;br /&gt;
* 如果访问 &amp;lt;code&amp;gt;/index.php&amp;lt;/code&amp;gt; 本身也 404，才更可能是站点根目录或 PHP 转发规则错误。&lt;br /&gt;
&lt;br /&gt;
== 总结 ==&lt;br /&gt;
这次问题的关键不在 MediaWiki 数据库，也不在特殊页面本身，而是在 Nginx 配置中的：&lt;br /&gt;
 &amp;lt;code&amp;gt;error_page 404 /404.html;&amp;lt;/code&amp;gt;&lt;br /&gt;
该配置会覆盖 MediaWiki 自己生成的 404 页面，导致：&lt;br /&gt;
&lt;br /&gt;
* 未创建页面无法显示 MediaWiki 的创建提示；&lt;br /&gt;
* 部分特殊页面看起来像是 Nginx 404；&lt;br /&gt;
* 排查方向容易误判为 URL 重写、PathInfo 或 MediaWiki 本地化问题。&lt;br /&gt;
&lt;br /&gt;
最终解决方法很简单：&lt;br /&gt;
 &amp;lt;code&amp;gt;#error_page 404 /404.html;&amp;lt;/code&amp;gt;&lt;br /&gt;
对 MediaWiki、DokuWiki、WordPress 等动态应用来说，通常不建议让 Nginx 直接覆盖应用层返回的 404 页面。应用自己的 404 页面往往包含有用的操作入口、创建页面提示、搜索入口或权限提示。如果被 Nginx 统一替换，会破坏应用的正常交互逻辑。&lt;br /&gt;
&lt;br /&gt;
[[分类:MediaWiki]]&lt;br /&gt;
[[分类:技术博客]]&lt;/div&gt;</summary>
		<author><name>Doge24190</name></author>
	</entry>
	<entry>
		<id>https://wiki.doge24190.top/index.php?title=%E5%88%86%E7%B1%BB:%E6%8A%80%E6%9C%AF%E5%8D%9A%E5%AE%A2&amp;diff=9</id>
		<title>分类:技术博客</title>
		<link rel="alternate" type="text/html" href="https://wiki.doge24190.top/index.php?title=%E5%88%86%E7%B1%BB:%E6%8A%80%E6%9C%AF%E5%8D%9A%E5%AE%A2&amp;diff=9"/>
		<updated>2026-06-10T22:01:53Z</updated>

		<summary type="html">&lt;p&gt;Doge24190：​创建页面，内容为“分类:博客”&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[分类:博客]]&lt;/div&gt;</summary>
		<author><name>Doge24190</name></author>
	</entry>
	<entry>
		<id>https://wiki.doge24190.top/index.php?title=%E5%AE%89%E8%A3%85MediaWiki%E6%97%B6%E9%81%87%E5%88%B0MyISAM%E8%A2%AB%E7%A6%81%E7%94%A8&amp;diff=8</id>
		<title>安装MediaWiki时遇到MyISAM被禁用</title>
		<link rel="alternate" type="text/html" href="https://wiki.doge24190.top/index.php?title=%E5%AE%89%E8%A3%85MediaWiki%E6%97%B6%E9%81%87%E5%88%B0MyISAM%E8%A2%AB%E7%A6%81%E7%94%A8&amp;diff=8"/>
		<updated>2026-06-10T22:01:35Z</updated>

		<summary type="html">&lt;p&gt;Doge24190：​&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= 使用云服务商 MySQL 安装 MediaWiki 时遇到 MyISAM 被禁用的解决记录 =&lt;br /&gt;
&lt;br /&gt;
== 问题背景 ==&lt;br /&gt;
在安装 MediaWiki 时，如果数据库使用的不是本机自建 MySQL，而是云服务商提供的托管数据库系统，例如：&lt;br /&gt;
&lt;br /&gt;
* Oracle Cloud MySQL HeatWave&lt;br /&gt;
* 阿里云 RDS MySQL&lt;br /&gt;
* 腾讯云云数据库 MySQL&lt;br /&gt;
* AWS RDS / Aurora MySQL&lt;br /&gt;
* Google Cloud SQL for MySQL&lt;br /&gt;
&lt;br /&gt;
那么在安装过程中可能会遇到与传统自建 MySQL 不同的问题。&lt;br /&gt;
&lt;br /&gt;
我这次使用的是 Oracle Cloud 创建的 MySQL 数据库系统，并让同一 VCN 内的服务器通过内网连接该数据库。前面的数据库连接、用户授权都处理完成后，MediaWiki 在创建数据表时出现了如下错误：&lt;br /&gt;
 &amp;lt;code&amp;gt;Error 3161: Storage engine MyISAM is disabled (Table creation is disallowed).&lt;br /&gt;
 &lt;br /&gt;
 Function: Wikimedia\Rdbms\Database::sourceFile(&lt;br /&gt;
 /www/wwwroot/mediawiki-1.45.3/sql/mysql/tables-generated.sql&lt;br /&gt;
 )&lt;br /&gt;
 &lt;br /&gt;
 Query:&lt;br /&gt;
 CREATE TABLE `my_wikisearchindex` (&lt;br /&gt;
   si_page INT UNSIGNED NOT NULL,&lt;br /&gt;
   si_title MEDIUMTEXT NOT NULL,&lt;br /&gt;
   si_text MEDIUMTEXT NOT NULL,&lt;br /&gt;
   FULLTEXT INDEX si_title (si_title),&lt;br /&gt;
   FULLTEXT INDEX si_text (si_text),&lt;br /&gt;
   PRIMARY KEY(si_page)&lt;br /&gt;
 ) ENGINE = MyISAM DEFAULT CHARSET = utf8mb4&amp;lt;/code&amp;gt;&lt;br /&gt;
核心错误是：&lt;br /&gt;
 &amp;lt;code&amp;gt;Storage engine MyISAM is disabled&amp;lt;/code&amp;gt;&lt;br /&gt;
也就是说，MediaWiki 的安装 SQL 尝试创建一个使用 MyISAM 存储引擎的数据表，但云服务商的 MySQL 数据库系统禁用了 MyISAM，因此建表失败。&lt;br /&gt;
&lt;br /&gt;
== 为什么云数据库会出现这个问题？ ==&lt;br /&gt;
MySQL 早期有多个存储引擎，其中比较常见的是：&lt;br /&gt;
&lt;br /&gt;
* InnoDB&lt;br /&gt;
* MyISAM&lt;br /&gt;
&lt;br /&gt;
现代 MySQL 默认推荐使用 InnoDB。相比 MyISAM，InnoDB 支持事务、崩溃恢复、行级锁、外键等特性，更适合现代 Web 应用。&lt;br /&gt;
&lt;br /&gt;
而 MyISAM 是较旧的存储引擎，它没有事务支持，崩溃恢复能力和并发处理能力也较弱。很多云服务商为了安全性、稳定性和统一管理，会直接禁用 MyISAM。&lt;br /&gt;
&lt;br /&gt;
因此在自建 MySQL 中可能还能正常执行的建表语句：&lt;br /&gt;
 &amp;lt;code&amp;gt;ENGINE = MyISAM&amp;lt;/code&amp;gt;&lt;br /&gt;
到了云服务商的托管 MySQL 环境中，就可能直接报错。&lt;br /&gt;
&lt;br /&gt;
== MediaWiki 为什么会用到 MyISAM？ ==&lt;br /&gt;
报错中出问题的表是：&lt;br /&gt;
 &amp;lt;code&amp;gt;searchindex&amp;lt;/code&amp;gt;&lt;br /&gt;
如果安装时设置了表前缀，例如我这里使用了：&lt;br /&gt;
 &amp;lt;code&amp;gt;my_wiki&amp;lt;/code&amp;gt;&lt;br /&gt;
那么实际表名会变成：&lt;br /&gt;
 &amp;lt;code&amp;gt;my_wikisearchindex&amp;lt;/code&amp;gt;&lt;br /&gt;
这个表主要用于 MediaWiki 的站内全文搜索。&lt;br /&gt;
&lt;br /&gt;
MediaWiki 历史上将搜索索引表设置为 MyISAM，主要是因为早期 MySQL 中 FULLTEXT 全文索引主要依赖 MyISAM。后来 MySQL 的 InnoDB 也已经支持 FULLTEXT，因此在现代 MySQL 版本中，将该表改为 InnoDB 通常是可行的。&lt;br /&gt;
&lt;br /&gt;
== 解决方法：将 MyISAM 替换为 InnoDB ==&lt;br /&gt;
MediaWiki 1.45.3 中，相关建表 SQL 文件位于：&lt;br /&gt;
 &amp;lt;code&amp;gt;/www/wwwroot/mediawiki-1.45.3/sql/mysql/tables-generated.sql&amp;lt;/code&amp;gt;&lt;br /&gt;
在修改前，建议先备份原文件：&lt;br /&gt;
 &amp;lt;code&amp;gt;cd /www/wwwroot/mediawiki-1.45.3&lt;br /&gt;
 &lt;br /&gt;
 sudo cp sql/mysql/tables-generated.sql \&lt;br /&gt;
 sql/mysql/tables-generated.sql.bak&amp;lt;/code&amp;gt;&lt;br /&gt;
然后将其中的 MyISAM 替换为 InnoDB：&lt;br /&gt;
 &amp;lt;code&amp;gt;sudo sed -i &#039;s/ENGINE = MyISAM/ENGINE = InnoDB/g&#039; \&lt;br /&gt;
 sql/mysql/tables-generated.sql&lt;br /&gt;
 &lt;br /&gt;
 sudo sed -i &#039;s/ENGINE=MyISAM/ENGINE=InnoDB/g&#039; \&lt;br /&gt;
 sql/mysql/tables-generated.sql&amp;lt;/code&amp;gt;&lt;br /&gt;
替换后可以检查是否还存在 MyISAM：&lt;br /&gt;
 &amp;lt;code&amp;gt;grep -n &amp;quot;MyISAM&amp;quot; sql/mysql/tables-generated.sql&amp;lt;/code&amp;gt;&lt;br /&gt;
如果没有输出，说明这个文件中已经没有 MyISAM 建表语句。&lt;br /&gt;
&lt;br /&gt;
也可以检查 InnoDB 替换结果：&lt;br /&gt;
 &amp;lt;code&amp;gt;grep -n &amp;quot;ENGINE = InnoDB&amp;quot; sql/mysql/tables-generated.sql&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 注意：安装失败后建议清空数据库重新安装 ==&lt;br /&gt;
如果 MediaWiki 已经安装到一半失败，数据库中可能已经创建了一部分表。为了避免残留表影响后续安装，建议删除并重新创建数据库。&lt;br /&gt;
&lt;br /&gt;
进入 MySQL 管理员账号后执行：&lt;br /&gt;
 &amp;lt;code&amp;gt;DROP DATABASE IF EXISTS mediawiki;&lt;br /&gt;
 &lt;br /&gt;
 CREATE DATABASE mediawiki&lt;br /&gt;
   CHARACTER SET utf8mb4&lt;br /&gt;
   COLLATE utf8mb4_unicode_ci;&amp;lt;/code&amp;gt;&lt;br /&gt;
如果数据库用户已经创建过，也可以重新授权：&lt;br /&gt;
 &amp;lt;code&amp;gt;GRANT ALL PRIVILEGES ON mediawiki.* TO &#039;mediawiki&#039;@&#039;10.0.0.47&#039;;&lt;br /&gt;
 &lt;br /&gt;
 FLUSH PRIVILEGES;&amp;lt;/code&amp;gt;&lt;br /&gt;
其中：&lt;br /&gt;
 &amp;lt;code&amp;gt;10.0.0.47&amp;lt;/code&amp;gt;&lt;br /&gt;
需要替换成实际 Web 服务器的内网 IP。&lt;br /&gt;
&lt;br /&gt;
如果当前只是为了先跑通安装，也可以临时使用：&lt;br /&gt;
 &amp;lt;code&amp;gt;GRANT ALL PRIVILEGES ON mediawiki.* TO &#039;mediawiki&#039;@&#039;%&#039;;&lt;br /&gt;
 &lt;br /&gt;
 FLUSH PRIVILEGES;&amp;lt;/code&amp;gt;&lt;br /&gt;
不过长期使用时，更推荐限制为指定内网 IP，而不是使用通配符 &amp;lt;code&amp;gt;%&amp;lt;/code&amp;gt;。&lt;br /&gt;
&lt;br /&gt;
== 安装完成后检查表引擎 ==&lt;br /&gt;
安装完成后，建议检查数据库中是否还有 MyISAM 表。&lt;br /&gt;
&lt;br /&gt;
进入 MySQL 后执行：&lt;br /&gt;
 &amp;lt;code&amp;gt;SELECT TABLE_NAME, ENGINE&lt;br /&gt;
 FROM information_schema.TABLES&lt;br /&gt;
 WHERE TABLE_SCHEMA = &#039;mediawiki&#039;&lt;br /&gt;
 ORDER BY ENGINE, TABLE_NAME;&amp;lt;/code&amp;gt;&lt;br /&gt;
如果想只检查 MyISAM 表，可以执行：&lt;br /&gt;
 &amp;lt;code&amp;gt;SELECT TABLE_NAME, ENGINE&lt;br /&gt;
 FROM information_schema.TABLES&lt;br /&gt;
 WHERE TABLE_SCHEMA = &#039;mediawiki&#039;&lt;br /&gt;
   AND ENGINE = &#039;MyISAM&#039;;&amp;lt;/code&amp;gt;&lt;br /&gt;
如果返回空结果，说明当前数据库中没有 MyISAM 表。&lt;br /&gt;
&lt;br /&gt;
也可以单独检查搜索索引表：&lt;br /&gt;
 &amp;lt;code&amp;gt;SHOW CREATE TABLE my_wikisearchindex\G&amp;lt;/code&amp;gt;&lt;br /&gt;
如果没有设置表前缀，则表名可能是：&lt;br /&gt;
 &amp;lt;code&amp;gt;SHOW CREATE TABLE searchindex\G&amp;lt;/code&amp;gt;&lt;br /&gt;
重点确认其中包含：&lt;br /&gt;
 &amp;lt;code&amp;gt;ENGINE=InnoDB&amp;lt;/code&amp;gt;&lt;br /&gt;
以及 FULLTEXT 索引是否正常存在。&lt;br /&gt;
&lt;br /&gt;
== 这样修改会不会有后患？ ==&lt;br /&gt;
从实际使用角度看，将 MediaWiki 的搜索索引表从 MyISAM 改为 InnoDB，一般不会影响正常运行。&lt;br /&gt;
&lt;br /&gt;
因为 MyISAM / InnoDB 是建表时指定的存储引擎。一旦表已经创建为 InnoDB，MediaWiki 后续运行时主要执行的是：&lt;br /&gt;
&lt;br /&gt;
* INSERT&lt;br /&gt;
* UPDATE&lt;br /&gt;
* SELECT&lt;br /&gt;
* DELETE&lt;br /&gt;
* ALTER TABLE&lt;br /&gt;
* CREATE INDEX&lt;br /&gt;
&lt;br /&gt;
它不会在普通访问、编辑页面、上传文件、搜索页面时自动把表切回 MyISAM。&lt;br /&gt;
&lt;br /&gt;
对于现代 MySQL 来说，InnoDB 反而是更推荐的选择。它具有更好的事务支持、崩溃恢复能力和并发处理能力，也更符合云数据库系统的默认管理策略。&lt;br /&gt;
&lt;br /&gt;
== 后续维护和升级时的注意事项 ==&lt;br /&gt;
这个问题真正需要注意的是后续升级。&lt;br /&gt;
&lt;br /&gt;
由于这次修改的是 MediaWiki 源码目录中的 SQL 文件：&lt;br /&gt;
 &amp;lt;code&amp;gt;sql/mysql/tables-generated.sql&amp;lt;/code&amp;gt;&lt;br /&gt;
所以以后升级 MediaWiki 时，如果换成了新的源码目录，或者覆盖了原来的 SQL 文件，官方包中的 &amp;lt;code&amp;gt;ENGINE = MyISAM&amp;lt;/code&amp;gt; 可能会再次出现。&lt;br /&gt;
&lt;br /&gt;
因此后续升级前后建议检查：&lt;br /&gt;
 &amp;lt;code&amp;gt;grep -Rni &amp;quot;MyISAM&amp;quot; /www/wwwroot/mediawiki-1.45.3/sql&amp;lt;/code&amp;gt;&lt;br /&gt;
如果已经升级到新目录，例如：&lt;br /&gt;
 &amp;lt;code&amp;gt;/www/wwwroot/mediawiki-1.46.x/&amp;lt;/code&amp;gt;&lt;br /&gt;
则需要改成对应的新路径：&lt;br /&gt;
 &amp;lt;code&amp;gt;grep -Rni &amp;quot;MyISAM&amp;quot; /www/wwwroot/mediawiki-1.46.x/sql&amp;lt;/code&amp;gt;&lt;br /&gt;
如果发现新的安装或升级 SQL 中仍然存在：&lt;br /&gt;
 &amp;lt;code&amp;gt;ENGINE = MyISAM&amp;lt;/code&amp;gt;&lt;br /&gt;
就需要再次评估是否替换为：&lt;br /&gt;
 &amp;lt;code&amp;gt;ENGINE = InnoDB&amp;lt;/code&amp;gt;&lt;br /&gt;
另外，升级 MediaWiki 后通常还需要运行维护脚本：&lt;br /&gt;
 &amp;lt;code&amp;gt;cd /www/wwwroot/mediawiki-1.45.3&lt;br /&gt;
 php maintenance/run.php update&amp;lt;/code&amp;gt;&lt;br /&gt;
升级后也建议再次检查表引擎：&lt;br /&gt;
 &amp;lt;code&amp;gt;SELECT TABLE_NAME, ENGINE&lt;br /&gt;
 FROM information_schema.TABLES&lt;br /&gt;
 WHERE TABLE_SCHEMA = &#039;mediawiki&#039;&lt;br /&gt;
   AND ENGINE = &#039;MyISAM&#039;;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 总结 ==&lt;br /&gt;
这次问题的根本原因不是 MediaWiki 数据库连接失败，也不是用户权限错误，而是：&lt;br /&gt;
 &amp;lt;code&amp;gt;云服务商托管 MySQL 禁用了 MyISAM 存储引擎，而 MediaWiki 安装 SQL 中仍然存在 MyISAM 建表语句。&amp;lt;/code&amp;gt;&lt;br /&gt;
解决思路是：&lt;br /&gt;
&lt;br /&gt;
# 备份 MediaWiki 的 MySQL 建表 SQL 文件；&lt;br /&gt;
# 将 &amp;lt;code&amp;gt;ENGINE = MyISAM&amp;lt;/code&amp;gt; 替换为 &amp;lt;code&amp;gt;ENGINE = InnoDB&amp;lt;/code&amp;gt;；&lt;br /&gt;
# 清空安装失败后残留的数据库；&lt;br /&gt;
# 重新运行 MediaWiki 安装程序；&lt;br /&gt;
# 安装完成后检查所有表是否都是 InnoDB；&lt;br /&gt;
# 后续升级 MediaWiki 时重新检查 SQL 文件，避免 MyISAM 建表语句再次出现。&lt;br /&gt;
&lt;br /&gt;
对于使用 Oracle Cloud MySQL、阿里云 RDS、腾讯云数据库、AWS RDS 等云服务商数据库系统的用户来说，这类问题并不罕见。云数据库通常更偏向稳定、安全和统一管理，因此会禁用一些旧式或不推荐的特性。安装传统 PHP 程序时，如果遇到类似报错，应优先检查程序的建表 SQL 是否使用了云数据库不支持的存储引擎。&lt;br /&gt;
[[分类:MediaWiki]]&lt;br /&gt;
[[分类:技术博客]]&lt;/div&gt;</summary>
		<author><name>Doge24190</name></author>
	</entry>
	<entry>
		<id>https://wiki.doge24190.top/index.php?title=%E9%A6%96%E9%A1%B5&amp;diff=7</id>
		<title>首页</title>
		<link rel="alternate" type="text/html" href="https://wiki.doge24190.top/index.php?title=%E9%A6%96%E9%A1%B5&amp;diff=7"/>
		<updated>2026-06-10T21:44:25Z</updated>

		<summary type="html">&lt;p&gt;Doge24190：​&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
= 欢迎到来！ =&lt;br /&gt;
&lt;br /&gt;
== 关于我 ==&lt;br /&gt;
我是doge24190，本站的站长，也是合作写作网站小城的问候的创建者，一只苦逼学生狗，喜欢玩电子游戏（倒腾各种技术活大概率是为了更舒服的玩游戏233）以及各种杂七杂八的东西。偶尔会去写下维百。 你通常可以在以下这些地方找到我：&lt;br /&gt;
&lt;br /&gt;
* 维基百科&lt;br /&gt;
* Steam&lt;br /&gt;
* 小城的问候&lt;br /&gt;
* github&lt;br /&gt;
&lt;br /&gt;
== 关于本站 ==&lt;br /&gt;
这里是doge24190的私人博客，不知你想看点什么？&lt;br /&gt;
&lt;br /&gt;
本站部分页面有对应的英语版本，但可能非最新版本，需要修缮&lt;br /&gt;
&lt;br /&gt;
* 存档&lt;br /&gt;
* 小工具&lt;br /&gt;
* 音乐&lt;br /&gt;
* 病毒博物馆&lt;br /&gt;
* 壁纸推荐&lt;br /&gt;
&lt;br /&gt;
== 入门 ==&lt;br /&gt;
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings MediaWiki配置设置列表]&lt;br /&gt;
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ/zh-hans MediaWiki常见问题]&lt;br /&gt;
* [https://lists.wikimedia.org/postorius/lists/mediawiki-announce.lists.wikimedia.org/ MediaWiki发布邮件列表]&lt;br /&gt;
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources 本地化MediaWiki到您的语言]&lt;br /&gt;
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam 了解如何在您的wiki上打击破坏]&lt;/div&gt;</summary>
		<author><name>Doge24190</name></author>
	</entry>
	<entry>
		<id>https://wiki.doge24190.top/index.php?title=%E5%AE%89%E8%A3%85MediaWiki%E6%97%B6%E9%81%87%E5%88%B0MyISAM%E8%A2%AB%E7%A6%81%E7%94%A8&amp;diff=6</id>
		<title>安装MediaWiki时遇到MyISAM被禁用</title>
		<link rel="alternate" type="text/html" href="https://wiki.doge24190.top/index.php?title=%E5%AE%89%E8%A3%85MediaWiki%E6%97%B6%E9%81%87%E5%88%B0MyISAM%E8%A2%AB%E7%A6%81%E7%94%A8&amp;diff=6"/>
		<updated>2026-06-10T21:42:47Z</updated>

		<summary type="html">&lt;p&gt;Doge24190：​&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= 使用云服务商 MySQL 安装 MediaWiki 时遇到 MyISAM 被禁用的解决记录 =&lt;br /&gt;
&lt;br /&gt;
== 问题背景 ==&lt;br /&gt;
在安装 MediaWiki 时，如果数据库使用的不是本机自建 MySQL，而是云服务商提供的托管数据库系统，例如：&lt;br /&gt;
&lt;br /&gt;
* Oracle Cloud MySQL HeatWave&lt;br /&gt;
* 阿里云 RDS MySQL&lt;br /&gt;
* 腾讯云云数据库 MySQL&lt;br /&gt;
* AWS RDS / Aurora MySQL&lt;br /&gt;
* Google Cloud SQL for MySQL&lt;br /&gt;
&lt;br /&gt;
那么在安装过程中可能会遇到与传统自建 MySQL 不同的问题。&lt;br /&gt;
&lt;br /&gt;
我这次使用的是 Oracle Cloud 创建的 MySQL 数据库系统，并让同一 VCN 内的服务器通过内网连接该数据库。前面的数据库连接、用户授权都处理完成后，MediaWiki 在创建数据表时出现了如下错误：&lt;br /&gt;
 &amp;lt;code&amp;gt;Error 3161: Storage engine MyISAM is disabled (Table creation is disallowed).&lt;br /&gt;
 &lt;br /&gt;
 Function: Wikimedia\Rdbms\Database::sourceFile(&lt;br /&gt;
 /www/wwwroot/mediawiki-1.45.3/sql/mysql/tables-generated.sql&lt;br /&gt;
 )&lt;br /&gt;
 &lt;br /&gt;
 Query:&lt;br /&gt;
 CREATE TABLE `my_wikisearchindex` (&lt;br /&gt;
   si_page INT UNSIGNED NOT NULL,&lt;br /&gt;
   si_title MEDIUMTEXT NOT NULL,&lt;br /&gt;
   si_text MEDIUMTEXT NOT NULL,&lt;br /&gt;
   FULLTEXT INDEX si_title (si_title),&lt;br /&gt;
   FULLTEXT INDEX si_text (si_text),&lt;br /&gt;
   PRIMARY KEY(si_page)&lt;br /&gt;
 ) ENGINE = MyISAM DEFAULT CHARSET = utf8mb4&amp;lt;/code&amp;gt;&lt;br /&gt;
核心错误是：&lt;br /&gt;
 &amp;lt;code&amp;gt;Storage engine MyISAM is disabled&amp;lt;/code&amp;gt;&lt;br /&gt;
也就是说，MediaWiki 的安装 SQL 尝试创建一个使用 MyISAM 存储引擎的数据表，但云服务商的 MySQL 数据库系统禁用了 MyISAM，因此建表失败。&lt;br /&gt;
&lt;br /&gt;
== 为什么云数据库会出现这个问题？ ==&lt;br /&gt;
MySQL 早期有多个存储引擎，其中比较常见的是：&lt;br /&gt;
&lt;br /&gt;
* InnoDB&lt;br /&gt;
* MyISAM&lt;br /&gt;
&lt;br /&gt;
现代 MySQL 默认推荐使用 InnoDB。相比 MyISAM，InnoDB 支持事务、崩溃恢复、行级锁、外键等特性，更适合现代 Web 应用。&lt;br /&gt;
&lt;br /&gt;
而 MyISAM 是较旧的存储引擎，它没有事务支持，崩溃恢复能力和并发处理能力也较弱。很多云服务商为了安全性、稳定性和统一管理，会直接禁用 MyISAM。&lt;br /&gt;
&lt;br /&gt;
因此在自建 MySQL 中可能还能正常执行的建表语句：&lt;br /&gt;
 &amp;lt;code&amp;gt;ENGINE = MyISAM&amp;lt;/code&amp;gt;&lt;br /&gt;
到了云服务商的托管 MySQL 环境中，就可能直接报错。&lt;br /&gt;
&lt;br /&gt;
== MediaWiki 为什么会用到 MyISAM？ ==&lt;br /&gt;
报错中出问题的表是：&lt;br /&gt;
 &amp;lt;code&amp;gt;searchindex&amp;lt;/code&amp;gt;&lt;br /&gt;
如果安装时设置了表前缀，例如我这里使用了：&lt;br /&gt;
 &amp;lt;code&amp;gt;my_wiki&amp;lt;/code&amp;gt;&lt;br /&gt;
那么实际表名会变成：&lt;br /&gt;
 &amp;lt;code&amp;gt;my_wikisearchindex&amp;lt;/code&amp;gt;&lt;br /&gt;
这个表主要用于 MediaWiki 的站内全文搜索。&lt;br /&gt;
&lt;br /&gt;
MediaWiki 历史上将搜索索引表设置为 MyISAM，主要是因为早期 MySQL 中 FULLTEXT 全文索引主要依赖 MyISAM。后来 MySQL 的 InnoDB 也已经支持 FULLTEXT，因此在现代 MySQL 版本中，将该表改为 InnoDB 通常是可行的。&lt;br /&gt;
&lt;br /&gt;
== 解决方法：将 MyISAM 替换为 InnoDB ==&lt;br /&gt;
MediaWiki 1.45.3 中，相关建表 SQL 文件位于：&lt;br /&gt;
 &amp;lt;code&amp;gt;/www/wwwroot/mediawiki-1.45.3/sql/mysql/tables-generated.sql&amp;lt;/code&amp;gt;&lt;br /&gt;
在修改前，建议先备份原文件：&lt;br /&gt;
 &amp;lt;code&amp;gt;cd /www/wwwroot/mediawiki-1.45.3&lt;br /&gt;
 &lt;br /&gt;
 sudo cp sql/mysql/tables-generated.sql \&lt;br /&gt;
 sql/mysql/tables-generated.sql.bak&amp;lt;/code&amp;gt;&lt;br /&gt;
然后将其中的 MyISAM 替换为 InnoDB：&lt;br /&gt;
 &amp;lt;code&amp;gt;sudo sed -i &#039;s/ENGINE = MyISAM/ENGINE = InnoDB/g&#039; \&lt;br /&gt;
 sql/mysql/tables-generated.sql&lt;br /&gt;
 &lt;br /&gt;
 sudo sed -i &#039;s/ENGINE=MyISAM/ENGINE=InnoDB/g&#039; \&lt;br /&gt;
 sql/mysql/tables-generated.sql&amp;lt;/code&amp;gt;&lt;br /&gt;
替换后可以检查是否还存在 MyISAM：&lt;br /&gt;
 &amp;lt;code&amp;gt;grep -n &amp;quot;MyISAM&amp;quot; sql/mysql/tables-generated.sql&amp;lt;/code&amp;gt;&lt;br /&gt;
如果没有输出，说明这个文件中已经没有 MyISAM 建表语句。&lt;br /&gt;
&lt;br /&gt;
也可以检查 InnoDB 替换结果：&lt;br /&gt;
 &amp;lt;code&amp;gt;grep -n &amp;quot;ENGINE = InnoDB&amp;quot; sql/mysql/tables-generated.sql&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 注意：安装失败后建议清空数据库重新安装 ==&lt;br /&gt;
如果 MediaWiki 已经安装到一半失败，数据库中可能已经创建了一部分表。为了避免残留表影响后续安装，建议删除并重新创建数据库。&lt;br /&gt;
&lt;br /&gt;
进入 MySQL 管理员账号后执行：&lt;br /&gt;
 &amp;lt;code&amp;gt;DROP DATABASE IF EXISTS mediawiki;&lt;br /&gt;
 &lt;br /&gt;
 CREATE DATABASE mediawiki&lt;br /&gt;
   CHARACTER SET utf8mb4&lt;br /&gt;
   COLLATE utf8mb4_unicode_ci;&amp;lt;/code&amp;gt;&lt;br /&gt;
如果数据库用户已经创建过，也可以重新授权：&lt;br /&gt;
 &amp;lt;code&amp;gt;GRANT ALL PRIVILEGES ON mediawiki.* TO &#039;mediawiki&#039;@&#039;10.0.0.47&#039;;&lt;br /&gt;
 &lt;br /&gt;
 FLUSH PRIVILEGES;&amp;lt;/code&amp;gt;&lt;br /&gt;
其中：&lt;br /&gt;
 &amp;lt;code&amp;gt;10.0.0.47&amp;lt;/code&amp;gt;&lt;br /&gt;
需要替换成实际 Web 服务器的内网 IP。&lt;br /&gt;
&lt;br /&gt;
如果当前只是为了先跑通安装，也可以临时使用：&lt;br /&gt;
 &amp;lt;code&amp;gt;GRANT ALL PRIVILEGES ON mediawiki.* TO &#039;mediawiki&#039;@&#039;%&#039;;&lt;br /&gt;
 &lt;br /&gt;
 FLUSH PRIVILEGES;&amp;lt;/code&amp;gt;&lt;br /&gt;
不过长期使用时，更推荐限制为指定内网 IP，而不是使用通配符 &amp;lt;code&amp;gt;%&amp;lt;/code&amp;gt;。&lt;br /&gt;
&lt;br /&gt;
== 安装完成后检查表引擎 ==&lt;br /&gt;
安装完成后，建议检查数据库中是否还有 MyISAM 表。&lt;br /&gt;
&lt;br /&gt;
进入 MySQL 后执行：&lt;br /&gt;
 &amp;lt;code&amp;gt;SELECT TABLE_NAME, ENGINE&lt;br /&gt;
 FROM information_schema.TABLES&lt;br /&gt;
 WHERE TABLE_SCHEMA = &#039;mediawiki&#039;&lt;br /&gt;
 ORDER BY ENGINE, TABLE_NAME;&amp;lt;/code&amp;gt;&lt;br /&gt;
如果想只检查 MyISAM 表，可以执行：&lt;br /&gt;
 &amp;lt;code&amp;gt;SELECT TABLE_NAME, ENGINE&lt;br /&gt;
 FROM information_schema.TABLES&lt;br /&gt;
 WHERE TABLE_SCHEMA = &#039;mediawiki&#039;&lt;br /&gt;
   AND ENGINE = &#039;MyISAM&#039;;&amp;lt;/code&amp;gt;&lt;br /&gt;
如果返回空结果，说明当前数据库中没有 MyISAM 表。&lt;br /&gt;
&lt;br /&gt;
也可以单独检查搜索索引表：&lt;br /&gt;
 &amp;lt;code&amp;gt;SHOW CREATE TABLE my_wikisearchindex\G&amp;lt;/code&amp;gt;&lt;br /&gt;
如果没有设置表前缀，则表名可能是：&lt;br /&gt;
 &amp;lt;code&amp;gt;SHOW CREATE TABLE searchindex\G&amp;lt;/code&amp;gt;&lt;br /&gt;
重点确认其中包含：&lt;br /&gt;
 &amp;lt;code&amp;gt;ENGINE=InnoDB&amp;lt;/code&amp;gt;&lt;br /&gt;
以及 FULLTEXT 索引是否正常存在。&lt;br /&gt;
&lt;br /&gt;
== 这样修改会不会有后患？ ==&lt;br /&gt;
从实际使用角度看，将 MediaWiki 的搜索索引表从 MyISAM 改为 InnoDB，一般不会影响正常运行。&lt;br /&gt;
&lt;br /&gt;
因为 MyISAM / InnoDB 是建表时指定的存储引擎。一旦表已经创建为 InnoDB，MediaWiki 后续运行时主要执行的是：&lt;br /&gt;
&lt;br /&gt;
* INSERT&lt;br /&gt;
* UPDATE&lt;br /&gt;
* SELECT&lt;br /&gt;
* DELETE&lt;br /&gt;
* ALTER TABLE&lt;br /&gt;
* CREATE INDEX&lt;br /&gt;
&lt;br /&gt;
它不会在普通访问、编辑页面、上传文件、搜索页面时自动把表切回 MyISAM。&lt;br /&gt;
&lt;br /&gt;
对于现代 MySQL 来说，InnoDB 反而是更推荐的选择。它具有更好的事务支持、崩溃恢复能力和并发处理能力，也更符合云数据库系统的默认管理策略。&lt;br /&gt;
&lt;br /&gt;
== 后续维护和升级时的注意事项 ==&lt;br /&gt;
这个问题真正需要注意的是后续升级。&lt;br /&gt;
&lt;br /&gt;
由于这次修改的是 MediaWiki 源码目录中的 SQL 文件：&lt;br /&gt;
 &amp;lt;code&amp;gt;sql/mysql/tables-generated.sql&amp;lt;/code&amp;gt;&lt;br /&gt;
所以以后升级 MediaWiki 时，如果换成了新的源码目录，或者覆盖了原来的 SQL 文件，官方包中的 &amp;lt;code&amp;gt;ENGINE = MyISAM&amp;lt;/code&amp;gt; 可能会再次出现。&lt;br /&gt;
&lt;br /&gt;
因此后续升级前后建议检查：&lt;br /&gt;
 &amp;lt;code&amp;gt;grep -Rni &amp;quot;MyISAM&amp;quot; /www/wwwroot/mediawiki-1.45.3/sql&amp;lt;/code&amp;gt;&lt;br /&gt;
如果已经升级到新目录，例如：&lt;br /&gt;
 &amp;lt;code&amp;gt;/www/wwwroot/mediawiki-1.46.x/&amp;lt;/code&amp;gt;&lt;br /&gt;
则需要改成对应的新路径：&lt;br /&gt;
 &amp;lt;code&amp;gt;grep -Rni &amp;quot;MyISAM&amp;quot; /www/wwwroot/mediawiki-1.46.x/sql&amp;lt;/code&amp;gt;&lt;br /&gt;
如果发现新的安装或升级 SQL 中仍然存在：&lt;br /&gt;
 &amp;lt;code&amp;gt;ENGINE = MyISAM&amp;lt;/code&amp;gt;&lt;br /&gt;
就需要再次评估是否替换为：&lt;br /&gt;
 &amp;lt;code&amp;gt;ENGINE = InnoDB&amp;lt;/code&amp;gt;&lt;br /&gt;
另外，升级 MediaWiki 后通常还需要运行维护脚本：&lt;br /&gt;
 &amp;lt;code&amp;gt;cd /www/wwwroot/mediawiki-1.45.3&lt;br /&gt;
 php maintenance/run.php update&amp;lt;/code&amp;gt;&lt;br /&gt;
升级后也建议再次检查表引擎：&lt;br /&gt;
 &amp;lt;code&amp;gt;SELECT TABLE_NAME, ENGINE&lt;br /&gt;
 FROM information_schema.TABLES&lt;br /&gt;
 WHERE TABLE_SCHEMA = &#039;mediawiki&#039;&lt;br /&gt;
   AND ENGINE = &#039;MyISAM&#039;;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 总结 ==&lt;br /&gt;
这次问题的根本原因不是 MediaWiki 数据库连接失败，也不是用户权限错误，而是：&lt;br /&gt;
 &amp;lt;code&amp;gt;云服务商托管 MySQL 禁用了 MyISAM 存储引擎，而 MediaWiki 安装 SQL 中仍然存在 MyISAM 建表语句。&amp;lt;/code&amp;gt;&lt;br /&gt;
解决思路是：&lt;br /&gt;
&lt;br /&gt;
# 备份 MediaWiki 的 MySQL 建表 SQL 文件；&lt;br /&gt;
# 将 &amp;lt;code&amp;gt;ENGINE = MyISAM&amp;lt;/code&amp;gt; 替换为 &amp;lt;code&amp;gt;ENGINE = InnoDB&amp;lt;/code&amp;gt;；&lt;br /&gt;
# 清空安装失败后残留的数据库；&lt;br /&gt;
# 重新运行 MediaWiki 安装程序；&lt;br /&gt;
# 安装完成后检查所有表是否都是 InnoDB；&lt;br /&gt;
# 后续升级 MediaWiki 时重新检查 SQL 文件，避免 MyISAM 建表语句再次出现。&lt;br /&gt;
&lt;br /&gt;
对于使用 Oracle Cloud MySQL、阿里云 RDS、腾讯云数据库、AWS RDS 等云服务商数据库系统的用户来说，这类问题并不罕见。云数据库通常更偏向稳定、安全和统一管理，因此会禁用一些旧式或不推荐的特性。安装传统 PHP 程序时，如果遇到类似报错，应优先检查程序的建表 SQL 是否使用了云数据库不支持的存储引擎。&lt;br /&gt;
[[分类:MediaWiki]]&lt;/div&gt;</summary>
		<author><name>Doge24190</name></author>
	</entry>
	<entry>
		<id>https://wiki.doge24190.top/index.php?title=%E5%88%86%E7%B1%BB:MediaWiki&amp;diff=5</id>
		<title>分类:MediaWiki</title>
		<link rel="alternate" type="text/html" href="https://wiki.doge24190.top/index.php?title=%E5%88%86%E7%B1%BB:MediaWiki&amp;diff=5"/>
		<updated>2026-06-10T21:42:16Z</updated>

		<summary type="html">&lt;p&gt;Doge24190：​创建页面，内容为“分类:Web”&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[分类:Web]]&lt;/div&gt;</summary>
		<author><name>Doge24190</name></author>
	</entry>
	<entry>
		<id>https://wiki.doge24190.top/index.php?title=MediaWiki%E9%A1%B5%E9%9D%A2%E6%98%BE%E7%A4%BANginx404&amp;diff=4</id>
		<title>MediaWiki页面显示Nginx404</title>
		<link rel="alternate" type="text/html" href="https://wiki.doge24190.top/index.php?title=MediaWiki%E9%A1%B5%E9%9D%A2%E6%98%BE%E7%A4%BANginx404&amp;diff=4"/>
		<updated>2026-06-10T21:41:17Z</updated>

		<summary type="html">&lt;p&gt;Doge24190：​&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= MediaWiki 页面显示 Nginx 404 的排查记录：error_page 404 导致的隐藏问题 =&lt;br /&gt;
&lt;br /&gt;
== 问题现象 ==&lt;br /&gt;
在安装并配置好 MediaWiki 后，首页可以正常打开，部分特殊页面也可以正常访问，例如：&lt;br /&gt;
 &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;https://wiki.example.com/index.php?title=特殊:上传文件&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
但是访问另一些页面时却出现 404，例如：&lt;br /&gt;
 &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;https://wiki.example.com/index.php?title=特殊:最近更改&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
以及访问尚未创建的普通页面时也会出现 404，例如：&lt;br /&gt;
 &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;https://wiki.example.com/index.php?title=Test&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
表面上看，问题似乎像是 MediaWiki 的特殊页面、本地化别名、URL 重写或 Nginx 伪静态规则出了问题。&lt;br /&gt;
&lt;br /&gt;
但进一步检查后发现，真正的问题并不是 MediaWiki 没有处理请求，而是 Nginx 把 MediaWiki 返回的应用内 404 页面覆盖掉了。&lt;br /&gt;
&lt;br /&gt;
== 排查过程 ==&lt;br /&gt;
首先使用 curl 测试英文特殊页面：&lt;br /&gt;
 &amp;lt;code&amp;gt;curl -I &amp;quot;&amp;lt;nowiki&amp;gt;https://wiki.example.com/index.php?title=Special:RecentChanges&amp;lt;/nowiki&amp;gt;&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
返回结果中可以看到，MediaWiki 实际上已经识别了这个特殊页面，并将其重定向到了中文特殊页名称：&lt;br /&gt;
 &amp;lt;code&amp;gt;HTTP/2 301&lt;br /&gt;
 location: &amp;lt;nowiki&amp;gt;https://wiki.example.com/index.php?title=%E7%89%B9%E6%AE%8A:%E6%9C%80%E8%BF%91%E6%9B%B4%E6%94%B9&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
这说明 MediaWiki 本身是工作的，&amp;lt;code&amp;gt;Special:RecentChanges&amp;lt;/code&amp;gt; 也能被识别。&lt;br /&gt;
&lt;br /&gt;
然后继续跟随跳转查看页面正文：&lt;br /&gt;
 &amp;lt;code&amp;gt;curl -L &amp;quot;&amp;lt;nowiki&amp;gt;https://wiki.example.com/index.php?title=Special:RecentChanges&amp;lt;/nowiki&amp;gt;&amp;quot; | head -n 50&amp;lt;/code&amp;gt;&lt;br /&gt;
返回内容却是：&lt;br /&gt;
 &amp;lt;code&amp;gt;&amp;lt;html&amp;gt;&lt;br /&gt;
 &amp;lt;head&amp;gt;&amp;lt;title&amp;gt;404 Not Found&amp;lt;/title&amp;gt;&amp;lt;/head&amp;gt;&lt;br /&gt;
 &amp;lt;body&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;center&amp;gt;&amp;lt;h1&amp;gt;404 Not Found&amp;lt;/h1&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;nowiki&amp;gt;&amp;lt;/center&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;hr&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;nowiki&amp;gt;&amp;lt;center&amp;gt;nginx&amp;lt;/center&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;/body&amp;gt;&lt;br /&gt;
 &amp;lt;/html&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
这里的关键点是：&lt;br /&gt;
 &amp;lt;code&amp;gt;nginx&amp;lt;/code&amp;gt;&lt;br /&gt;
如果是 MediaWiki 自己返回的页面，HTML 中通常会包含 MediaWiki 的页面结构、皮肤、站点标题等内容；而这里显示的是 Nginx 默认 404 页面。&lt;br /&gt;
&lt;br /&gt;
因此可以判断：这个 404 不是 MediaWiki 页面本身，而是被 Nginx 的错误页处理逻辑替换了。&lt;br /&gt;
&lt;br /&gt;
== 根本原因 ==&lt;br /&gt;
在宝塔面板生成的 Nginx 配置中，存在如下配置：&lt;br /&gt;
 &amp;lt;code&amp;gt;error_page 404 /404.html;&amp;lt;/code&amp;gt;&lt;br /&gt;
完整片段类似：&lt;br /&gt;
 &amp;lt;code&amp;gt;#ERROR-PAGE-START  错误页配置，可以注释、删除或修改&lt;br /&gt;
 error_page 404 /404.html;&lt;br /&gt;
 #error_page 502 /502.html;&lt;br /&gt;
 #ERROR-PAGE-END&amp;lt;/code&amp;gt;&lt;br /&gt;
这个配置的含义是：只要后端返回 HTTP 404，Nginx 就将页面替换为 &amp;lt;code&amp;gt;/404.html&amp;lt;/code&amp;gt;。&lt;br /&gt;
&lt;br /&gt;
这对于普通静态网站可能没问题，但对 MediaWiki 这类动态应用来说会造成误伤。&lt;br /&gt;
&lt;br /&gt;
MediaWiki 在很多情况下会主动返回 HTTP 404 状态码，但页面正文并不是错误，而是应用内的正常提示。例如：&lt;br /&gt;
&lt;br /&gt;
* 访问尚未创建的页面；&lt;br /&gt;
* 访问不存在的标题；&lt;br /&gt;
* 某些特殊页面或查询结果为空的页面；&lt;br /&gt;
* 需要由 MediaWiki 自己生成的“页面不存在，可创建此页面”提示。&lt;br /&gt;
&lt;br /&gt;
也就是说，对于 MediaWiki 来说，HTTP 404 并不一定代表 Nginx 层面的文件不存在。它可能只是 MediaWiki 用来表达“这个 wiki 页面尚未创建”的正常状态码。&lt;br /&gt;
&lt;br /&gt;
但是 Nginx 的：&lt;br /&gt;
 &amp;lt;code&amp;gt;error_page 404 /404.html;&amp;lt;/code&amp;gt;&lt;br /&gt;
会把 MediaWiki 自己生成的页面内容覆盖掉，最终用户看到的就不再是 MediaWiki 的提示，而是 Nginx 的：&lt;br /&gt;
 &amp;lt;code&amp;gt;404 Not Found&lt;br /&gt;
 nginx&amp;lt;/code&amp;gt;&lt;br /&gt;
这就是导致“未创建页面打不开”“部分特殊页面变成 404”的真正原因。&lt;br /&gt;
&lt;br /&gt;
== 解决方法 ==&lt;br /&gt;
编辑站点的 Nginx 配置文件，例如宝塔环境下通常位于：&lt;br /&gt;
 &amp;lt;code&amp;gt;/www/server/panel/vhost/nginx/wiki.example.com.conf&amp;lt;/code&amp;gt;&lt;br /&gt;
找到：&lt;br /&gt;
 &amp;lt;code&amp;gt;error_page 404 /404.html;&amp;lt;/code&amp;gt;&lt;br /&gt;
将其注释掉：&lt;br /&gt;
 &amp;lt;code&amp;gt;#error_page 404 /404.html;&amp;lt;/code&amp;gt;&lt;br /&gt;
修改后的配置应类似：&lt;br /&gt;
 &amp;lt;code&amp;gt;#ERROR-PAGE-START  错误页配置，可以注释、删除或修改&lt;br /&gt;
 #error_page 404 /404.html;&lt;br /&gt;
 #error_page 502 /502.html;&lt;br /&gt;
 #ERROR-PAGE-END&amp;lt;/code&amp;gt;&lt;br /&gt;
然后测试 Nginx 配置：&lt;br /&gt;
 &amp;lt;code&amp;gt;sudo nginx -t&amp;lt;/code&amp;gt;&lt;br /&gt;
如果显示配置正常，再重载 Nginx：&lt;br /&gt;
 &amp;lt;code&amp;gt;sudo systemctl reload nginx&amp;lt;/code&amp;gt;&lt;br /&gt;
宝塔环境也可以使用：&lt;br /&gt;
 &amp;lt;code&amp;gt;sudo /etc/init.d/nginx reload&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 修复后的效果 ==&lt;br /&gt;
修改后，再访问未创建页面：&lt;br /&gt;
 &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;https://wiki.example.com/index.php?title=Test&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
它可能仍然返回 HTTP 404 状态码，这是正常的，因为 &amp;lt;code&amp;gt;Test&amp;lt;/code&amp;gt; 页面确实尚未创建。&lt;br /&gt;
&lt;br /&gt;
但页面正文不应再是 Nginx 的：&lt;br /&gt;
 &amp;lt;code&amp;gt;404 Not Found&lt;br /&gt;
 nginx&amp;lt;/code&amp;gt;&lt;br /&gt;
而应该变成 MediaWiki 自己的提示页面，例如：&lt;br /&gt;
 &amp;lt;code&amp;gt;此页面目前没有内容。&lt;br /&gt;
 您可以搜索本页标题、在相关页面中搜索，或者创建此页面。&amp;lt;/code&amp;gt;&lt;br /&gt;
也就是说，判断问题是否修复，不能只看 HTTP 状态码是否为 404，而要看页面正文到底是 MediaWiki 生成的，还是 Nginx 生成的。&lt;br /&gt;
&lt;br /&gt;
可以用下面的命令检查：&lt;br /&gt;
 &amp;lt;code&amp;gt;curl -L &amp;quot;&amp;lt;nowiki&amp;gt;https://wiki.example.com/index.php?title=Test&amp;lt;/nowiki&amp;gt;&amp;quot; | head -n 30&amp;lt;/code&amp;gt;&lt;br /&gt;
如果输出中出现 MediaWiki 页面结构，说明已经正常。&lt;br /&gt;
&lt;br /&gt;
== 推荐的 MediaWiki Nginx 基础配置 ==&lt;br /&gt;
对于使用 &amp;lt;code&amp;gt;/index.php?title=页面名&amp;lt;/code&amp;gt; 这种默认 URL 形式的 MediaWiki 站点，可以保留简单的基础转发规则：&lt;br /&gt;
 &amp;lt;code&amp;gt;location / {&lt;br /&gt;
     try_files $uri $uri/ /index.php?$query_string;&lt;br /&gt;
 }&amp;lt;/code&amp;gt;&lt;br /&gt;
同时建议在 &amp;lt;code&amp;gt;LocalSettings.php&amp;lt;/code&amp;gt; 中明确使用保守的 URL 配置：&lt;br /&gt;
 &amp;lt;code&amp;gt;$wgScriptPath = &amp;quot;&amp;quot;;&lt;br /&gt;
 $wgArticlePath = &amp;quot;/index.php?title=$1&amp;quot;;&lt;br /&gt;
 $wgUsePathInfo = false;&lt;br /&gt;
 $wgServer = &amp;quot;&amp;lt;nowiki&amp;gt;https://wiki.example.com&amp;lt;/nowiki&amp;gt;&amp;quot;;&amp;lt;/code&amp;gt;&lt;br /&gt;
这样可以避免 MediaWiki 生成 &amp;lt;code&amp;gt;/index.php/PageName&amp;lt;/code&amp;gt; 或短链接形式的路径，从而减少和 Nginx URL 重写规则冲突的概率。&lt;br /&gt;
&lt;br /&gt;
== 关于未创建页面的 404 状态码 ==&lt;br /&gt;
需要特别注意：MediaWiki 中访问未创建页面返回 HTTP 404 是正常行为。&lt;br /&gt;
&lt;br /&gt;
例如：&lt;br /&gt;
 &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;https://wiki.example.com/index.php?title=Test&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
如果 &amp;lt;code&amp;gt;Test&amp;lt;/code&amp;gt; 页面尚未创建，MediaWiki 可以返回 404 状态码，同时显示“页面不存在，可创建此页面”的提示。&lt;br /&gt;
&lt;br /&gt;
因此，排查时不能简单认为：&lt;br /&gt;
 &amp;lt;code&amp;gt;HTTP 404 = Nginx 配置错误&amp;lt;/code&amp;gt;&lt;br /&gt;
更准确的判断方式是：&lt;br /&gt;
&lt;br /&gt;
* 如果页面正文是 MediaWiki 风格的“页面不存在”提示，说明正常；&lt;br /&gt;
* 如果页面正文是 &amp;lt;code&amp;gt;404 Not Found nginx&amp;lt;/code&amp;gt;，说明被 Nginx 错误页覆盖了；&lt;br /&gt;
* 如果访问 &amp;lt;code&amp;gt;/index.php&amp;lt;/code&amp;gt; 本身也 404，才更可能是站点根目录或 PHP 转发规则错误。&lt;br /&gt;
&lt;br /&gt;
== 总结 ==&lt;br /&gt;
这次问题的关键不在 MediaWiki 数据库，也不在特殊页面本身，而是在 Nginx 配置中的：&lt;br /&gt;
 &amp;lt;code&amp;gt;error_page 404 /404.html;&amp;lt;/code&amp;gt;&lt;br /&gt;
该配置会覆盖 MediaWiki 自己生成的 404 页面，导致：&lt;br /&gt;
&lt;br /&gt;
* 未创建页面无法显示 MediaWiki 的创建提示；&lt;br /&gt;
* 部分特殊页面看起来像是 Nginx 404；&lt;br /&gt;
* 排查方向容易误判为 URL 重写、PathInfo 或 MediaWiki 本地化问题。&lt;br /&gt;
&lt;br /&gt;
最终解决方法很简单：&lt;br /&gt;
 &amp;lt;code&amp;gt;#error_page 404 /404.html;&amp;lt;/code&amp;gt;&lt;br /&gt;
对 MediaWiki、DokuWiki、WordPress 等动态应用来说，通常不建议让 Nginx 直接覆盖应用层返回的 404 页面。应用自己的 404 页面往往包含有用的操作入口、创建页面提示、搜索入口或权限提示。如果被 Nginx 统一替换，会破坏应用的正常交互逻辑。&lt;br /&gt;
&lt;br /&gt;
[[分类:MediaWiki]]&lt;/div&gt;</summary>
		<author><name>Doge24190</name></author>
	</entry>
	<entry>
		<id>https://wiki.doge24190.top/index.php?title=MediaWiki%E9%A1%B5%E9%9D%A2%E6%98%BE%E7%A4%BANginx404&amp;diff=3</id>
		<title>MediaWiki页面显示Nginx404</title>
		<link rel="alternate" type="text/html" href="https://wiki.doge24190.top/index.php?title=MediaWiki%E9%A1%B5%E9%9D%A2%E6%98%BE%E7%A4%BANginx404&amp;diff=3"/>
		<updated>2026-06-10T21:32:36Z</updated>

		<summary type="html">&lt;p&gt;Doge24190：​创建页面，内容为“= MediaWiki 页面显示 Nginx 404 的排查记录：error_page 404 导致的隐藏问题 =  == 问题现象 == 在安装并配置好 MediaWiki 后，首页可以正常打开，部分特殊页面也可以正常访问，例如：  &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;https://wiki.example.com/index.php?title=特殊:上传文件&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; 但是访问另一些页面时却出现 404，例如：  &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;https://wiki.example.com/index.php?title=特殊:最近更改&amp;lt;/nowiki&amp;gt;&amp;lt;/co…”&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= MediaWiki 页面显示 Nginx 404 的排查记录：error_page 404 导致的隐藏问题 =&lt;br /&gt;
&lt;br /&gt;
== 问题现象 ==&lt;br /&gt;
在安装并配置好 MediaWiki 后，首页可以正常打开，部分特殊页面也可以正常访问，例如：&lt;br /&gt;
 &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;https://wiki.example.com/index.php?title=特殊:上传文件&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
但是访问另一些页面时却出现 404，例如：&lt;br /&gt;
 &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;https://wiki.example.com/index.php?title=特殊:最近更改&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
以及访问尚未创建的普通页面时也会出现 404，例如：&lt;br /&gt;
 &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;https://wiki.example.com/index.php?title=Test&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
表面上看，问题似乎像是 MediaWiki 的特殊页面、本地化别名、URL 重写或 Nginx 伪静态规则出了问题。&lt;br /&gt;
&lt;br /&gt;
但进一步检查后发现，真正的问题并不是 MediaWiki 没有处理请求，而是 Nginx 把 MediaWiki 返回的应用内 404 页面覆盖掉了。&lt;br /&gt;
&lt;br /&gt;
== 排查过程 ==&lt;br /&gt;
首先使用 curl 测试英文特殊页面：&lt;br /&gt;
 &amp;lt;code&amp;gt;curl -I &amp;quot;&amp;lt;nowiki&amp;gt;https://wiki.example.com/index.php?title=Special:RecentChanges&amp;lt;/nowiki&amp;gt;&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
返回结果中可以看到，MediaWiki 实际上已经识别了这个特殊页面，并将其重定向到了中文特殊页名称：&lt;br /&gt;
 &amp;lt;code&amp;gt;HTTP/2 301&lt;br /&gt;
 location: &amp;lt;nowiki&amp;gt;https://wiki.example.com/index.php?title=%E7%89%B9%E6%AE%8A:%E6%9C%80%E8%BF%91%E6%9B%B4%E6%94%B9&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
这说明 MediaWiki 本身是工作的，&amp;lt;code&amp;gt;Special:RecentChanges&amp;lt;/code&amp;gt; 也能被识别。&lt;br /&gt;
&lt;br /&gt;
然后继续跟随跳转查看页面正文：&lt;br /&gt;
 &amp;lt;code&amp;gt;curl -L &amp;quot;&amp;lt;nowiki&amp;gt;https://wiki.example.com/index.php?title=Special:RecentChanges&amp;lt;/nowiki&amp;gt;&amp;quot; | head -n 50&amp;lt;/code&amp;gt;&lt;br /&gt;
返回内容却是：&lt;br /&gt;
 &amp;lt;code&amp;gt;&amp;lt;html&amp;gt;&lt;br /&gt;
 &amp;lt;head&amp;gt;&amp;lt;title&amp;gt;404 Not Found&amp;lt;/title&amp;gt;&amp;lt;/head&amp;gt;&lt;br /&gt;
 &amp;lt;body&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;center&amp;gt;&amp;lt;h1&amp;gt;404 Not Found&amp;lt;/h1&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;nowiki&amp;gt;&amp;lt;/center&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;hr&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;nowiki&amp;gt;&amp;lt;center&amp;gt;nginx&amp;lt;/center&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;/body&amp;gt;&lt;br /&gt;
 &amp;lt;/html&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
这里的关键点是：&lt;br /&gt;
 &amp;lt;code&amp;gt;nginx&amp;lt;/code&amp;gt;&lt;br /&gt;
如果是 MediaWiki 自己返回的页面，HTML 中通常会包含 MediaWiki 的页面结构、皮肤、站点标题等内容；而这里显示的是 Nginx 默认 404 页面。&lt;br /&gt;
&lt;br /&gt;
因此可以判断：这个 404 不是 MediaWiki 页面本身，而是被 Nginx 的错误页处理逻辑替换了。&lt;br /&gt;
&lt;br /&gt;
== 根本原因 ==&lt;br /&gt;
在宝塔面板生成的 Nginx 配置中，存在如下配置：&lt;br /&gt;
 &amp;lt;code&amp;gt;error_page 404 /404.html;&amp;lt;/code&amp;gt;&lt;br /&gt;
完整片段类似：&lt;br /&gt;
 &amp;lt;code&amp;gt;#ERROR-PAGE-START  错误页配置，可以注释、删除或修改&lt;br /&gt;
 error_page 404 /404.html;&lt;br /&gt;
 #error_page 502 /502.html;&lt;br /&gt;
 #ERROR-PAGE-END&amp;lt;/code&amp;gt;&lt;br /&gt;
这个配置的含义是：只要后端返回 HTTP 404，Nginx 就将页面替换为 &amp;lt;code&amp;gt;/404.html&amp;lt;/code&amp;gt;。&lt;br /&gt;
&lt;br /&gt;
这对于普通静态网站可能没问题，但对 MediaWiki 这类动态应用来说会造成误伤。&lt;br /&gt;
&lt;br /&gt;
MediaWiki 在很多情况下会主动返回 HTTP 404 状态码，但页面正文并不是错误，而是应用内的正常提示。例如：&lt;br /&gt;
&lt;br /&gt;
* 访问尚未创建的页面；&lt;br /&gt;
* 访问不存在的标题；&lt;br /&gt;
* 某些特殊页面或查询结果为空的页面；&lt;br /&gt;
* 需要由 MediaWiki 自己生成的“页面不存在，可创建此页面”提示。&lt;br /&gt;
&lt;br /&gt;
也就是说，对于 MediaWiki 来说，HTTP 404 并不一定代表 Nginx 层面的文件不存在。它可能只是 MediaWiki 用来表达“这个 wiki 页面尚未创建”的正常状态码。&lt;br /&gt;
&lt;br /&gt;
但是 Nginx 的：&lt;br /&gt;
 &amp;lt;code&amp;gt;error_page 404 /404.html;&amp;lt;/code&amp;gt;&lt;br /&gt;
会把 MediaWiki 自己生成的页面内容覆盖掉，最终用户看到的就不再是 MediaWiki 的提示，而是 Nginx 的：&lt;br /&gt;
 &amp;lt;code&amp;gt;404 Not Found&lt;br /&gt;
 nginx&amp;lt;/code&amp;gt;&lt;br /&gt;
这就是导致“未创建页面打不开”“部分特殊页面变成 404”的真正原因。&lt;br /&gt;
&lt;br /&gt;
== 解决方法 ==&lt;br /&gt;
编辑站点的 Nginx 配置文件，例如宝塔环境下通常位于：&lt;br /&gt;
 &amp;lt;code&amp;gt;/www/server/panel/vhost/nginx/wiki.example.com.conf&amp;lt;/code&amp;gt;&lt;br /&gt;
找到：&lt;br /&gt;
 &amp;lt;code&amp;gt;error_page 404 /404.html;&amp;lt;/code&amp;gt;&lt;br /&gt;
将其注释掉：&lt;br /&gt;
 &amp;lt;code&amp;gt;#error_page 404 /404.html;&amp;lt;/code&amp;gt;&lt;br /&gt;
修改后的配置应类似：&lt;br /&gt;
 &amp;lt;code&amp;gt;#ERROR-PAGE-START  错误页配置，可以注释、删除或修改&lt;br /&gt;
 #error_page 404 /404.html;&lt;br /&gt;
 #error_page 502 /502.html;&lt;br /&gt;
 #ERROR-PAGE-END&amp;lt;/code&amp;gt;&lt;br /&gt;
然后测试 Nginx 配置：&lt;br /&gt;
 &amp;lt;code&amp;gt;sudo nginx -t&amp;lt;/code&amp;gt;&lt;br /&gt;
如果显示配置正常，再重载 Nginx：&lt;br /&gt;
 &amp;lt;code&amp;gt;sudo systemctl reload nginx&amp;lt;/code&amp;gt;&lt;br /&gt;
宝塔环境也可以使用：&lt;br /&gt;
 &amp;lt;code&amp;gt;sudo /etc/init.d/nginx reload&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 修复后的效果 ==&lt;br /&gt;
修改后，再访问未创建页面：&lt;br /&gt;
 &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;https://wiki.example.com/index.php?title=Test&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
它可能仍然返回 HTTP 404 状态码，这是正常的，因为 &amp;lt;code&amp;gt;Test&amp;lt;/code&amp;gt; 页面确实尚未创建。&lt;br /&gt;
&lt;br /&gt;
但页面正文不应再是 Nginx 的：&lt;br /&gt;
 &amp;lt;code&amp;gt;404 Not Found&lt;br /&gt;
 nginx&amp;lt;/code&amp;gt;&lt;br /&gt;
而应该变成 MediaWiki 自己的提示页面，例如：&lt;br /&gt;
 &amp;lt;code&amp;gt;此页面目前没有内容。&lt;br /&gt;
 您可以搜索本页标题、在相关页面中搜索，或者创建此页面。&amp;lt;/code&amp;gt;&lt;br /&gt;
也就是说，判断问题是否修复，不能只看 HTTP 状态码是否为 404，而要看页面正文到底是 MediaWiki 生成的，还是 Nginx 生成的。&lt;br /&gt;
&lt;br /&gt;
可以用下面的命令检查：&lt;br /&gt;
 &amp;lt;code&amp;gt;curl -L &amp;quot;&amp;lt;nowiki&amp;gt;https://wiki.example.com/index.php?title=Test&amp;lt;/nowiki&amp;gt;&amp;quot; | head -n 30&amp;lt;/code&amp;gt;&lt;br /&gt;
如果输出中出现 MediaWiki 页面结构，说明已经正常。&lt;br /&gt;
&lt;br /&gt;
== 推荐的 MediaWiki Nginx 基础配置 ==&lt;br /&gt;
对于使用 &amp;lt;code&amp;gt;/index.php?title=页面名&amp;lt;/code&amp;gt; 这种默认 URL 形式的 MediaWiki 站点，可以保留简单的基础转发规则：&lt;br /&gt;
 &amp;lt;code&amp;gt;location / {&lt;br /&gt;
     try_files $uri $uri/ /index.php?$query_string;&lt;br /&gt;
 }&amp;lt;/code&amp;gt;&lt;br /&gt;
同时建议在 &amp;lt;code&amp;gt;LocalSettings.php&amp;lt;/code&amp;gt; 中明确使用保守的 URL 配置：&lt;br /&gt;
 &amp;lt;code&amp;gt;$wgScriptPath = &amp;quot;&amp;quot;;&lt;br /&gt;
 $wgArticlePath = &amp;quot;/index.php?title=$1&amp;quot;;&lt;br /&gt;
 $wgUsePathInfo = false;&lt;br /&gt;
 $wgServer = &amp;quot;&amp;lt;nowiki&amp;gt;https://wiki.example.com&amp;lt;/nowiki&amp;gt;&amp;quot;;&amp;lt;/code&amp;gt;&lt;br /&gt;
这样可以避免 MediaWiki 生成 &amp;lt;code&amp;gt;/index.php/PageName&amp;lt;/code&amp;gt; 或短链接形式的路径，从而减少和 Nginx URL 重写规则冲突的概率。&lt;br /&gt;
&lt;br /&gt;
== 关于未创建页面的 404 状态码 ==&lt;br /&gt;
需要特别注意：MediaWiki 中访问未创建页面返回 HTTP 404 是正常行为。&lt;br /&gt;
&lt;br /&gt;
例如：&lt;br /&gt;
 &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;https://wiki.example.com/index.php?title=Test&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
如果 &amp;lt;code&amp;gt;Test&amp;lt;/code&amp;gt; 页面尚未创建，MediaWiki 可以返回 404 状态码，同时显示“页面不存在，可创建此页面”的提示。&lt;br /&gt;
&lt;br /&gt;
因此，排查时不能简单认为：&lt;br /&gt;
 &amp;lt;code&amp;gt;HTTP 404 = Nginx 配置错误&amp;lt;/code&amp;gt;&lt;br /&gt;
更准确的判断方式是：&lt;br /&gt;
&lt;br /&gt;
* 如果页面正文是 MediaWiki 风格的“页面不存在”提示，说明正常；&lt;br /&gt;
* 如果页面正文是 &amp;lt;code&amp;gt;404 Not Found nginx&amp;lt;/code&amp;gt;，说明被 Nginx 错误页覆盖了；&lt;br /&gt;
* 如果访问 &amp;lt;code&amp;gt;/index.php&amp;lt;/code&amp;gt; 本身也 404，才更可能是站点根目录或 PHP 转发规则错误。&lt;br /&gt;
&lt;br /&gt;
== 总结 ==&lt;br /&gt;
这次问题的关键不在 MediaWiki 数据库，也不在特殊页面本身，而是在 Nginx 配置中的：&lt;br /&gt;
 &amp;lt;code&amp;gt;error_page 404 /404.html;&amp;lt;/code&amp;gt;&lt;br /&gt;
该配置会覆盖 MediaWiki 自己生成的 404 页面，导致：&lt;br /&gt;
&lt;br /&gt;
* 未创建页面无法显示 MediaWiki 的创建提示；&lt;br /&gt;
* 部分特殊页面看起来像是 Nginx 404；&lt;br /&gt;
* 排查方向容易误判为 URL 重写、PathInfo 或 MediaWiki 本地化问题。&lt;br /&gt;
&lt;br /&gt;
最终解决方法很简单：&lt;br /&gt;
 &amp;lt;code&amp;gt;#error_page 404 /404.html;&amp;lt;/code&amp;gt;&lt;br /&gt;
对 MediaWiki、DokuWiki、WordPress 等动态应用来说，通常不建议让 Nginx 直接覆盖应用层返回的 404 页面。应用自己的 404 页面往往包含有用的操作入口、创建页面提示、搜索入口或权限提示。如果被 Nginx 统一替换，会破坏应用的正常交互逻辑。&lt;/div&gt;</summary>
		<author><name>Doge24190</name></author>
	</entry>
	<entry>
		<id>https://wiki.doge24190.top/index.php?title=%E5%AE%89%E8%A3%85MediaWiki%E6%97%B6%E9%81%87%E5%88%B0MyISAM%E8%A2%AB%E7%A6%81%E7%94%A8&amp;diff=2</id>
		<title>安装MediaWiki时遇到MyISAM被禁用</title>
		<link rel="alternate" type="text/html" href="https://wiki.doge24190.top/index.php?title=%E5%AE%89%E8%A3%85MediaWiki%E6%97%B6%E9%81%87%E5%88%B0MyISAM%E8%A2%AB%E7%A6%81%E7%94%A8&amp;diff=2"/>
		<updated>2026-06-10T21:31:16Z</updated>

		<summary type="html">&lt;p&gt;Doge24190：​创建页面，内容为“= 使用云服务商 MySQL 安装 MediaWiki 时遇到 MyISAM 被禁用的解决记录 =  == 问题背景 == 在安装 MediaWiki 时，如果数据库使用的不是本机自建 MySQL，而是云服务商提供的托管数据库系统，例如：  * Oracle Cloud MySQL HeatWave * 阿里云 RDS MySQL * 腾讯云云数据库 MySQL * AWS RDS / Aurora MySQL * Google Cloud SQL for MySQL  那么在安装过程中可能会遇到与传统自建 MySQL 不同的问题。…”&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= 使用云服务商 MySQL 安装 MediaWiki 时遇到 MyISAM 被禁用的解决记录 =&lt;br /&gt;
&lt;br /&gt;
== 问题背景 ==&lt;br /&gt;
在安装 MediaWiki 时，如果数据库使用的不是本机自建 MySQL，而是云服务商提供的托管数据库系统，例如：&lt;br /&gt;
&lt;br /&gt;
* Oracle Cloud MySQL HeatWave&lt;br /&gt;
* 阿里云 RDS MySQL&lt;br /&gt;
* 腾讯云云数据库 MySQL&lt;br /&gt;
* AWS RDS / Aurora MySQL&lt;br /&gt;
* Google Cloud SQL for MySQL&lt;br /&gt;
&lt;br /&gt;
那么在安装过程中可能会遇到与传统自建 MySQL 不同的问题。&lt;br /&gt;
&lt;br /&gt;
我这次使用的是 Oracle Cloud 创建的 MySQL 数据库系统，并让同一 VCN 内的服务器通过内网连接该数据库。前面的数据库连接、用户授权都处理完成后，MediaWiki 在创建数据表时出现了如下错误：&lt;br /&gt;
 &amp;lt;code&amp;gt;Error 3161: Storage engine MyISAM is disabled (Table creation is disallowed).&lt;br /&gt;
 &lt;br /&gt;
 Function: Wikimedia\Rdbms\Database::sourceFile(&lt;br /&gt;
 /www/wwwroot/mediawiki-1.45.3/sql/mysql/tables-generated.sql&lt;br /&gt;
 )&lt;br /&gt;
 &lt;br /&gt;
 Query:&lt;br /&gt;
 CREATE TABLE `my_wikisearchindex` (&lt;br /&gt;
   si_page INT UNSIGNED NOT NULL,&lt;br /&gt;
   si_title MEDIUMTEXT NOT NULL,&lt;br /&gt;
   si_text MEDIUMTEXT NOT NULL,&lt;br /&gt;
   FULLTEXT INDEX si_title (si_title),&lt;br /&gt;
   FULLTEXT INDEX si_text (si_text),&lt;br /&gt;
   PRIMARY KEY(si_page)&lt;br /&gt;
 ) ENGINE = MyISAM DEFAULT CHARSET = utf8mb4&amp;lt;/code&amp;gt;&lt;br /&gt;
核心错误是：&lt;br /&gt;
 &amp;lt;code&amp;gt;Storage engine MyISAM is disabled&amp;lt;/code&amp;gt;&lt;br /&gt;
也就是说，MediaWiki 的安装 SQL 尝试创建一个使用 MyISAM 存储引擎的数据表，但云服务商的 MySQL 数据库系统禁用了 MyISAM，因此建表失败。&lt;br /&gt;
&lt;br /&gt;
== 为什么云数据库会出现这个问题？ ==&lt;br /&gt;
MySQL 早期有多个存储引擎，其中比较常见的是：&lt;br /&gt;
&lt;br /&gt;
* InnoDB&lt;br /&gt;
* MyISAM&lt;br /&gt;
&lt;br /&gt;
现代 MySQL 默认推荐使用 InnoDB。相比 MyISAM，InnoDB 支持事务、崩溃恢复、行级锁、外键等特性，更适合现代 Web 应用。&lt;br /&gt;
&lt;br /&gt;
而 MyISAM 是较旧的存储引擎，它没有事务支持，崩溃恢复能力和并发处理能力也较弱。很多云服务商为了安全性、稳定性和统一管理，会直接禁用 MyISAM。&lt;br /&gt;
&lt;br /&gt;
因此在自建 MySQL 中可能还能正常执行的建表语句：&lt;br /&gt;
 &amp;lt;code&amp;gt;ENGINE = MyISAM&amp;lt;/code&amp;gt;&lt;br /&gt;
到了云服务商的托管 MySQL 环境中，就可能直接报错。&lt;br /&gt;
&lt;br /&gt;
== MediaWiki 为什么会用到 MyISAM？ ==&lt;br /&gt;
报错中出问题的表是：&lt;br /&gt;
 &amp;lt;code&amp;gt;searchindex&amp;lt;/code&amp;gt;&lt;br /&gt;
如果安装时设置了表前缀，例如我这里使用了：&lt;br /&gt;
 &amp;lt;code&amp;gt;my_wiki&amp;lt;/code&amp;gt;&lt;br /&gt;
那么实际表名会变成：&lt;br /&gt;
 &amp;lt;code&amp;gt;my_wikisearchindex&amp;lt;/code&amp;gt;&lt;br /&gt;
这个表主要用于 MediaWiki 的站内全文搜索。&lt;br /&gt;
&lt;br /&gt;
MediaWiki 历史上将搜索索引表设置为 MyISAM，主要是因为早期 MySQL 中 FULLTEXT 全文索引主要依赖 MyISAM。后来 MySQL 的 InnoDB 也已经支持 FULLTEXT，因此在现代 MySQL 版本中，将该表改为 InnoDB 通常是可行的。&lt;br /&gt;
&lt;br /&gt;
== 解决方法：将 MyISAM 替换为 InnoDB ==&lt;br /&gt;
MediaWiki 1.45.3 中，相关建表 SQL 文件位于：&lt;br /&gt;
 &amp;lt;code&amp;gt;/www/wwwroot/mediawiki-1.45.3/sql/mysql/tables-generated.sql&amp;lt;/code&amp;gt;&lt;br /&gt;
在修改前，建议先备份原文件：&lt;br /&gt;
 &amp;lt;code&amp;gt;cd /www/wwwroot/mediawiki-1.45.3&lt;br /&gt;
 &lt;br /&gt;
 sudo cp sql/mysql/tables-generated.sql \&lt;br /&gt;
 sql/mysql/tables-generated.sql.bak&amp;lt;/code&amp;gt;&lt;br /&gt;
然后将其中的 MyISAM 替换为 InnoDB：&lt;br /&gt;
 &amp;lt;code&amp;gt;sudo sed -i &#039;s/ENGINE = MyISAM/ENGINE = InnoDB/g&#039; \&lt;br /&gt;
 sql/mysql/tables-generated.sql&lt;br /&gt;
 &lt;br /&gt;
 sudo sed -i &#039;s/ENGINE=MyISAM/ENGINE=InnoDB/g&#039; \&lt;br /&gt;
 sql/mysql/tables-generated.sql&amp;lt;/code&amp;gt;&lt;br /&gt;
替换后可以检查是否还存在 MyISAM：&lt;br /&gt;
 &amp;lt;code&amp;gt;grep -n &amp;quot;MyISAM&amp;quot; sql/mysql/tables-generated.sql&amp;lt;/code&amp;gt;&lt;br /&gt;
如果没有输出，说明这个文件中已经没有 MyISAM 建表语句。&lt;br /&gt;
&lt;br /&gt;
也可以检查 InnoDB 替换结果：&lt;br /&gt;
 &amp;lt;code&amp;gt;grep -n &amp;quot;ENGINE = InnoDB&amp;quot; sql/mysql/tables-generated.sql&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 注意：安装失败后建议清空数据库重新安装 ==&lt;br /&gt;
如果 MediaWiki 已经安装到一半失败，数据库中可能已经创建了一部分表。为了避免残留表影响后续安装，建议删除并重新创建数据库。&lt;br /&gt;
&lt;br /&gt;
进入 MySQL 管理员账号后执行：&lt;br /&gt;
 &amp;lt;code&amp;gt;DROP DATABASE IF EXISTS mediawiki;&lt;br /&gt;
 &lt;br /&gt;
 CREATE DATABASE mediawiki&lt;br /&gt;
   CHARACTER SET utf8mb4&lt;br /&gt;
   COLLATE utf8mb4_unicode_ci;&amp;lt;/code&amp;gt;&lt;br /&gt;
如果数据库用户已经创建过，也可以重新授权：&lt;br /&gt;
 &amp;lt;code&amp;gt;GRANT ALL PRIVILEGES ON mediawiki.* TO &#039;mediawiki&#039;@&#039;10.0.0.47&#039;;&lt;br /&gt;
 &lt;br /&gt;
 FLUSH PRIVILEGES;&amp;lt;/code&amp;gt;&lt;br /&gt;
其中：&lt;br /&gt;
 &amp;lt;code&amp;gt;10.0.0.47&amp;lt;/code&amp;gt;&lt;br /&gt;
需要替换成实际 Web 服务器的内网 IP。&lt;br /&gt;
&lt;br /&gt;
如果当前只是为了先跑通安装，也可以临时使用：&lt;br /&gt;
 &amp;lt;code&amp;gt;GRANT ALL PRIVILEGES ON mediawiki.* TO &#039;mediawiki&#039;@&#039;%&#039;;&lt;br /&gt;
 &lt;br /&gt;
 FLUSH PRIVILEGES;&amp;lt;/code&amp;gt;&lt;br /&gt;
不过长期使用时，更推荐限制为指定内网 IP，而不是使用通配符 &amp;lt;code&amp;gt;%&amp;lt;/code&amp;gt;。&lt;br /&gt;
&lt;br /&gt;
== 安装完成后检查表引擎 ==&lt;br /&gt;
安装完成后，建议检查数据库中是否还有 MyISAM 表。&lt;br /&gt;
&lt;br /&gt;
进入 MySQL 后执行：&lt;br /&gt;
 &amp;lt;code&amp;gt;SELECT TABLE_NAME, ENGINE&lt;br /&gt;
 FROM information_schema.TABLES&lt;br /&gt;
 WHERE TABLE_SCHEMA = &#039;mediawiki&#039;&lt;br /&gt;
 ORDER BY ENGINE, TABLE_NAME;&amp;lt;/code&amp;gt;&lt;br /&gt;
如果想只检查 MyISAM 表，可以执行：&lt;br /&gt;
 &amp;lt;code&amp;gt;SELECT TABLE_NAME, ENGINE&lt;br /&gt;
 FROM information_schema.TABLES&lt;br /&gt;
 WHERE TABLE_SCHEMA = &#039;mediawiki&#039;&lt;br /&gt;
   AND ENGINE = &#039;MyISAM&#039;;&amp;lt;/code&amp;gt;&lt;br /&gt;
如果返回空结果，说明当前数据库中没有 MyISAM 表。&lt;br /&gt;
&lt;br /&gt;
也可以单独检查搜索索引表：&lt;br /&gt;
 &amp;lt;code&amp;gt;SHOW CREATE TABLE my_wikisearchindex\G&amp;lt;/code&amp;gt;&lt;br /&gt;
如果没有设置表前缀，则表名可能是：&lt;br /&gt;
 &amp;lt;code&amp;gt;SHOW CREATE TABLE searchindex\G&amp;lt;/code&amp;gt;&lt;br /&gt;
重点确认其中包含：&lt;br /&gt;
 &amp;lt;code&amp;gt;ENGINE=InnoDB&amp;lt;/code&amp;gt;&lt;br /&gt;
以及 FULLTEXT 索引是否正常存在。&lt;br /&gt;
&lt;br /&gt;
== 这样修改会不会有后患？ ==&lt;br /&gt;
从实际使用角度看，将 MediaWiki 的搜索索引表从 MyISAM 改为 InnoDB，一般不会影响正常运行。&lt;br /&gt;
&lt;br /&gt;
因为 MyISAM / InnoDB 是建表时指定的存储引擎。一旦表已经创建为 InnoDB，MediaWiki 后续运行时主要执行的是：&lt;br /&gt;
&lt;br /&gt;
* INSERT&lt;br /&gt;
* UPDATE&lt;br /&gt;
* SELECT&lt;br /&gt;
* DELETE&lt;br /&gt;
* ALTER TABLE&lt;br /&gt;
* CREATE INDEX&lt;br /&gt;
&lt;br /&gt;
它不会在普通访问、编辑页面、上传文件、搜索页面时自动把表切回 MyISAM。&lt;br /&gt;
&lt;br /&gt;
对于现代 MySQL 来说，InnoDB 反而是更推荐的选择。它具有更好的事务支持、崩溃恢复能力和并发处理能力，也更符合云数据库系统的默认管理策略。&lt;br /&gt;
&lt;br /&gt;
== 后续维护和升级时的注意事项 ==&lt;br /&gt;
这个问题真正需要注意的是后续升级。&lt;br /&gt;
&lt;br /&gt;
由于这次修改的是 MediaWiki 源码目录中的 SQL 文件：&lt;br /&gt;
 &amp;lt;code&amp;gt;sql/mysql/tables-generated.sql&amp;lt;/code&amp;gt;&lt;br /&gt;
所以以后升级 MediaWiki 时，如果换成了新的源码目录，或者覆盖了原来的 SQL 文件，官方包中的 &amp;lt;code&amp;gt;ENGINE = MyISAM&amp;lt;/code&amp;gt; 可能会再次出现。&lt;br /&gt;
&lt;br /&gt;
因此后续升级前后建议检查：&lt;br /&gt;
 &amp;lt;code&amp;gt;grep -Rni &amp;quot;MyISAM&amp;quot; /www/wwwroot/mediawiki-1.45.3/sql&amp;lt;/code&amp;gt;&lt;br /&gt;
如果已经升级到新目录，例如：&lt;br /&gt;
 &amp;lt;code&amp;gt;/www/wwwroot/mediawiki-1.46.x/&amp;lt;/code&amp;gt;&lt;br /&gt;
则需要改成对应的新路径：&lt;br /&gt;
 &amp;lt;code&amp;gt;grep -Rni &amp;quot;MyISAM&amp;quot; /www/wwwroot/mediawiki-1.46.x/sql&amp;lt;/code&amp;gt;&lt;br /&gt;
如果发现新的安装或升级 SQL 中仍然存在：&lt;br /&gt;
 &amp;lt;code&amp;gt;ENGINE = MyISAM&amp;lt;/code&amp;gt;&lt;br /&gt;
就需要再次评估是否替换为：&lt;br /&gt;
 &amp;lt;code&amp;gt;ENGINE = InnoDB&amp;lt;/code&amp;gt;&lt;br /&gt;
另外，升级 MediaWiki 后通常还需要运行维护脚本：&lt;br /&gt;
 &amp;lt;code&amp;gt;cd /www/wwwroot/mediawiki-1.45.3&lt;br /&gt;
 php maintenance/run.php update&amp;lt;/code&amp;gt;&lt;br /&gt;
升级后也建议再次检查表引擎：&lt;br /&gt;
 &amp;lt;code&amp;gt;SELECT TABLE_NAME, ENGINE&lt;br /&gt;
 FROM information_schema.TABLES&lt;br /&gt;
 WHERE TABLE_SCHEMA = &#039;mediawiki&#039;&lt;br /&gt;
   AND ENGINE = &#039;MyISAM&#039;;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 总结 ==&lt;br /&gt;
这次问题的根本原因不是 MediaWiki 数据库连接失败，也不是用户权限错误，而是：&lt;br /&gt;
 &amp;lt;code&amp;gt;云服务商托管 MySQL 禁用了 MyISAM 存储引擎，而 MediaWiki 安装 SQL 中仍然存在 MyISAM 建表语句。&amp;lt;/code&amp;gt;&lt;br /&gt;
解决思路是：&lt;br /&gt;
&lt;br /&gt;
# 备份 MediaWiki 的 MySQL 建表 SQL 文件；&lt;br /&gt;
# 将 &amp;lt;code&amp;gt;ENGINE = MyISAM&amp;lt;/code&amp;gt; 替换为 &amp;lt;code&amp;gt;ENGINE = InnoDB&amp;lt;/code&amp;gt;；&lt;br /&gt;
# 清空安装失败后残留的数据库；&lt;br /&gt;
# 重新运行 MediaWiki 安装程序；&lt;br /&gt;
# 安装完成后检查所有表是否都是 InnoDB；&lt;br /&gt;
# 后续升级 MediaWiki 时重新检查 SQL 文件，避免 MyISAM 建表语句再次出现。&lt;br /&gt;
&lt;br /&gt;
对于使用 Oracle Cloud MySQL、阿里云 RDS、腾讯云数据库、AWS RDS 等云服务商数据库系统的用户来说，这类问题并不罕见。云数据库通常更偏向稳定、安全和统一管理，因此会禁用一些旧式或不推荐的特性。安装传统 PHP 程序时，如果遇到类似报错，应优先检查程序的建表 SQL 是否使用了云数据库不支持的存储引擎。&lt;/div&gt;</summary>
		<author><name>Doge24190</name></author>
	</entry>
</feed>