You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MediaWiki URL中mod-rewrite跳转至实际文件的问题求助

解决MediaWiki URL重写与真实文件冲突的问题

嘿,我来帮你搞定这个MediaWiki的URL重写冲突问题!首先得明确两个关键点:一是Apache的默认优先级会优先处理真实存在的文件/目录,跳过MediaWiki的重写规则;二是直接能访问LocalSettings.php本身就是个安全风险——这个文件存着数据库密码等敏感信息,绝对不能对外暴露。我们分两步来解决:

1. 先堵住LocalSettings.php的访问漏洞

在你的MediaWiki根目录的.htaccess文件里,加上这段规则,直接禁止外部访问这个敏感文件:

<Files "LocalSettings.php">
    Require all denied
</Files>

加完之后,再访问http://10.0.0.160/wiki/LocalSettings.php就会返回403禁止访问,既解决了安全问题,也避免了跳转到真实文件的情况。

2. 调整重写规则,让Wiki页面优先于真实文件

如果你还有其他和真实文件/目录同名的Wiki页面需要访问,就得修改重写规则,让MediaWiki的路由优先级更高(除了必要的静态资源,比如样式、图片这些)。

打开MediaWiki根目录的.htaccess,替换掉现有的重写规则,改成下面这样:

# 启用重写引擎
RewriteEngine On

# 放行静态资源请求(样式、图片、扩展文件等),保证网站正常加载
RewriteRule ^(skins|images|extensions|resources|vendor)/ - [L]

# 保护敏感配置文件
<Files "LocalSettings.php">
    Require all denied
</Files>

# 所有其他请求,不管有没有对应的真实文件/目录,都交给MediaWiki处理
RewriteRule ^(.*)$ index.php/$1 [L]

简单解释下规则:

  • 第一条RewriteRule专门处理静态资源,让这些文件直接返回,不经过MediaWiki,保证网站的样式、图片能正常显示;
  • 中间的<Files>块就是刚才加的安全防护;
  • 最后一条规则把所有其他请求都转发到MediaWiki的入口文件,这样就算有同名的真实文件,也会优先显示对应的Wiki文章。

更简洁的备选方案(Apache 2.2.16+可用)

如果你的Apache版本是2.2.16或更高,可以用FallbackResource指令替代复杂的重写规则,代码更简洁:

RewriteEngine On

# 保护敏感文件
<Files "LocalSettings.php">
    Require all denied
</Files>

# 放行静态资源
RewriteRule ^(skins|images|extensions|resources|vendor)/ - [L]

# 所有非静态资源请求都自动转到MediaWiki入口
FallbackResource /wiki/index.php

这个指令的作用是,当请求的路径不存在时自动转发到指定入口,结合前面的静态资源放行规则,同样能实现我们要的效果。

最后,修改完.htaccess后,记得重启Apache服务让配置生效,然后去测试那些和真实文件同名的Wiki页面,应该就能正常显示对应的文章啦!

内容的提问来源于stack exchange,提问作者user5549921

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 06:24:15