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

基于.htaccess和网址国别标识的多语言自定义404页面重定向问题

多语言404页面重定向解决方案

嘿,我来帮你搞定这个根据原URL语言标识跳转对应404页面的问题!你已经完成了基础的ErrorDocument配置,接下来咱们分两种方案实现需求,同时解决你之前遇到的stristr无效和.htaccess不工作的问题。

方案一:直接在.htaccess中处理(服务器层面,无需PHP)

这个方案更高效,不用经过PHP解析,直接通过Apache的mod_rewrite规则匹配原URL的语言标识,跳转到对应页面。

首先确保你的Apache开启了mod_rewrite模块,然后在.htaccess中添加以下规则:

RewriteEngine On

# 处理法语404:匹配包含_fr/的无效请求
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} _fr/
RewriteRule ^ /page404_fr.php [L,R=404]

# 处理英语404:匹配包含_en/的无效请求
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} _en/
RewriteRule ^ /page404_en.php [L,R=404]

# 默认404页面(未匹配到语言标识时)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^ /page404.php [L,R=404]

规则说明:

  • RewriteCond %{REQUEST_FILENAME} !-f 和 !-d:确保请求的文件或目录确实不存在(触发404的前提)
  • RewriteCond %{REQUEST_URI} _fr/:匹配原URL中包含_fr/的请求
  • [L,R=404]:L表示这是最后一条规则,R=404表示返回404状态码(关键,避免搜索引擎误判为有效页面)

方案二:在page404.php中用PHP处理(解决你stristr无效的问题)

如果你更倾向于用PHP控制,问题大概率出在你没有获取到正确的原请求URL。Apache在跳转至ErrorDocument页面时,会把原请求的URL存在$_SERVER['REDIRECT_URL']变量中,而不是你可能误用的$_SERVER['PHP_SELF'](后者是当前页面的路径)。

试试这段PHP代码:

<?php
// 获取原请求的URL,优先用REDIRECT_URL,兼容不同环境
$originalUrl = $_SERVER['REDIRECT_URL'] ?? $_SERVER['REQUEST_URI'];

// 判断语言标识并跳转
if (stristr($originalUrl, '_fr/')) {
    // 发送404状态码,然后加载法语404内容
    http_response_code(404);
    include '/page404_fr.php'; // 也可以用header跳转:header("Location: /page404_fr.php", true, 404);
    exit;
} elseif (stristr($originalUrl, '_en/')) {
    http_response_code(404);
    include '/page404_en.php';
    exit;
} else {
    // 默认404内容
    http_response_code(404);
    echo "<h1>404 - Page Not Found</h1>";
}
?>

为什么之前stristr没生效?

很大可能是你用错了变量!比如用$_SERVER['PHP_SELF']得到的是/page404.php,自然匹配不到_fr/或_en/,换成$_SERVER['REDIRECT_URL']就能拿到用户原本访问的错误URL了。

排查.htaccess不工作的常见问题

  1. 确认mod_rewrite已开启:在Apache的配置文件(httpd.conf或apache2.conf)中,确保LoadModule rewrite_module modules/mod_rewrite.so这一行没有被注释。
  2. AllowOverride权限:在你的网站虚拟主机配置中,设置AllowOverride All(默认可能是None,导致.htaccess规则不生效):
    <Directory "/path/to/your/website">
        AllowOverride All
        Require all granted
    </Directory>
    
  3. 路径正确性:确保page404_fr.php、page404_en.php的路径和.htaccess/PHP代码中写的一致(比如都在网站根目录)。

内容的提问来源于stack exchange,提问作者Killian M.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 05:13:21