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

使用.htaccess为特定slug配置Wildcard 404重定向出错求助

问题分析与解决

你的规则之所以会把所有/decks/后带文本的链接(即使是有效页面)都重定向,核心原因是:

  • 你用了%{REQUEST_FILENAME} !-f和%{REQUEST_FILENAME} !-d这两个条件,它们只检查物理文件或目录是否存在。
  • 如果/decks/下的有效页面是动态生成的(比如通过框架路由、PHP脚本处理,没有对应的物理文件/目录),这两个条件会判定为“真”,规则就会触发,把这些有效页面也当成不存在的URL重定向了。

解决方案

方案一:用PHP处理404跳转(适合动态站点)

这种方法能精准捕获真正的404请求,不会误判动态有效页面:

  1. 在.htaccess中添加404错误处理规则:
ErrorDocument 404 /404-handler.php
  1. 创建404-handler.php文件,写入以下代码:
<?php
$requestUri = $_SERVER['REQUEST_URI'];
// 判断请求是否以/decks/开头,且不是/decks/本身
if (strpos($requestUri, '/decks/') === 0 && $requestUri !== '/decks/') {
    header("Location: /decks/", true, 302);
    exit;
}
// 下面是常规404页面的内容
http_response_code(404);
?>
<!DOCTYPE html>
<html>
<head>
    <title>404 Not Found</title>
</head>
<body>
    <h1>404 Not Found</h1>
    <p>The requested URL was not found on this server.</p>
</body>
</html>

方案二:添加有效路径例外(适合静态/少量动态页面)

如果/decks/下的有效页面数量不多,可以直接在规则里排除它们,避免被误定向:

# Custom Redirects for /decks/ 404s
<IfModule mod_rewrite.c>
RewriteEngine On
# 逐一排除已知的有效/decks/子页面
RewriteCond %{REQUEST_URI} !^/decks/valid-page1$ [NC]
RewriteCond %{REQUEST_URI} !^/decks/valid-page2$ [NC]
# 原有的条件
RewriteCond %{REQUEST_URI} ^/decks/ [NC]
RewriteCond %{REQUEST_URI} !^/decks/$ [NC]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^decks/ /decks/ [L,R=302]
</IfModule>

注意:每次新增/decks/下的有效页面,都需要在这里添加对应的排除规则。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 00:48:22