如何移除MediaWiki URL中的'/wiki/'路径段?
解决MediaWiki rest.php路径被误识别为文章页面的问题
自己搭建的MediaWiki站点原本使用根路径直接访问文章(如https://[website]/Main_Page)和动作页面(如https://[website]/edit/Main_Page),安装FlaggedRevs扩展后,访问https://[website]/w/rest.php/flaggedrevs/internal/review/Main_Page出现404,请求被误识别为名为“W/rest.php/flaggedrevs/internal/review/Main Page”的文章。添加/wiki/路径段后问题解决,但希望保留根路径访问的形式,通过.htaccess配置修复该问题。
核心修复思路
问题根源是带PathInfo的rest.php请求(如/w/rest.php/xxx)被原有.htaccess规则误转发到w/index.php——因为%{DOCUMENT_ROOT}%{REQUEST_URI}对应的服务器真实路径不存在,触发了非文件/目录的转发规则。我们需要先让Apache直接处理/w/开头的真实脚本请求,再处理文章和动作页面的转发。
具体配置修改
- 更新.htaccess配置
将原有配置修改为:
RewriteEngine On # 放行/w/开头的请求,直接交由Apache处理真实脚本(含PathInfo) RewriteCond %{REQUEST_URI} ^/w/ RewriteRule ^ - [L] # 处理文章页面和动作路径的转发 RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} !-f RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} !-d RewriteRule ^(.*)$ w/index.php?title=$1 [L,QSA] RewriteRule ^$ w/index.php [L,QSA]
- 恢复LocalSettings.php配置
去掉之前添加的/wiki/路径段,恢复为原始配置:
$wgArticlePath = "/$1"; $actions = array( 'view', 'edit', 'watch', 'unwatch', 'delete', 'revert', 'rollback', 'protect', 'unprotect', 'markpatrolled', 'render', 'submit', 'history', 'purge', 'info' ); foreach ( $actions as $action ) { $wgActionPaths[$action] = "/$action/$1"; }
验证效果
修改完成后:
- 仍可通过根路径访问文章(如
https://[website]/Main_Page)和动作页面(如https://[website]/edit/Main_Page) https://[website]/w/rest.php/flaggedrevs/internal/review/Main_Page可正常访问,不会被识别为文章页面
内容的提问来源于stack exchange,提问作者user22159304
相关产品推荐
相关产品推荐

