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

Apache单实例MediaWiki子域本地化翻译配置求助

实现MediaWiki子域本地化的.htaccess方案

没问题,这个需求完全可以通过Apache的mod_rewrite模块配合.htaccess来实现,同时需要和MediaWiki的页面命名规则配合。我给你详细拆解步骤:

前提准备

首先要确保你的语言子域(比如fr.example.com)已经正确解析到和主域example.com相同的服务器Web根目录,这样.htaccess的规则才能生效。另外,Apache服务器需要开启mod_rewrite模块,并且在虚拟主机配置中设置AllowOverride All,允许.htaccess文件覆盖配置。

.htaccess重写规则

在你的Web根目录的.htaccess文件中(如果已经有MediaWiki友好URL的规则,把下面的规则放在现有规则的最前面),添加以下内容:

# 开启重写引擎
RewriteEngine On

# 匹配两位语言代码的子域(如fr、es、en),排除主域和www子域
RewriteCond %{HTTP_HOST} ^([a-z]{2})\.example\.com$ [NC]
# 避免直接访问index.php时触发循环
RewriteCond %{REQUEST_URI} !^/index\.php [NC]
# 将子域的语言代码追加到请求路径末尾,内部重写至对应翻译页面
RewriteRule ^(Wiki/.*)$ /$1/%1 [L]

规则解释

  • RewriteCond %{HTTP_HOST} ^([a-z]{2})\.example\.com$ [NC]:捕获URL中的两位语言代码(比如fr),[NC]表示不区分大小写,兼容FR.example.com这类访问。
  • RewriteCond %{REQUEST_URI} !^/index\.php [NC]:排除直接访问index.php的请求,防止重写循环。
  • RewriteRule ^(Wiki/.*)$ /$1/%1 [L]:把请求路径(比如Wiki/Page)重写为Wiki/Page/fr(%1对应前面捕获的语言代码),[L]表示这是最后一条匹配的规则,停止后续处理。

MediaWiki配合设置

要确保你的翻译页面是按照Page/fr、Page2/fr的命名规则创建的(这也是MediaWiki多语言页面的常规命名方式)。如果使用了Translate扩展,要确保翻译页面的命名和这个规则一致,这样重写后的URL才能正确匹配到对应的翻译内容。

另外,如果你希望子域访问时自动设置界面语言,可以在MediaWiki的LocalSettings.php中添加以下代码,根据子域设置当前语言:

// 从子域提取语言代码
$host = $_SERVER['HTTP_HOST'];
if (preg_match('/^([a-z]{2})\.example\.com$/i', $host, $matches)) {
    $wgLanguageCode = $matches[1];
}

测试与排查

  1. 访问https://fr.example.com/Wiki/Page,检查是否正确加载https://example.com/Wiki/Page/fr的内容。
  2. 如果出现404错误,先检查子域解析是否正确,然后确认Apache的mod_rewrite是否开启,AllowOverride All是否配置正确。
  3. 如果出现循环重定向,检查.htaccess中是否有其他规则冲突,确保上述规则放在最前面。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 09:13:48