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

如何修改htaccess重写规则将不存在的页面重定向至404页

方案说明

你的现有规则仅校验了请求路径对应的物理文件/目录不存在就触发转发,无法识别业务层面的pagename参数是否合法,所以需要htaccess规则优化 + PHP页面逻辑配合实现无效路径跳转404。

第一步:优化.htaccess规则

先修正原有规则的小瑕疵,避免路径匹配出错:

RewriteEngine ON
ErrorDocument 404 /404.php

# 现有PHP文件的重写规则优化
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{DOCUMENT_ROOT}/$1.php -f
RewriteRule ^(.*)/?$ $1.php [NC,L]

# hosting前缀路径转发
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^hosting/(.*)/?$ main-page.php?pagename=$1 [NC,L]

# 其他路径转发
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/?$ sub-page.php?pagename=$1 [NC,L]

第二步:在PHP页面添加404判断逻辑

分别在main-page.php和sub-page.php的最顶部添加校验逻辑,判断传入的pagename是否为合法值,不合法则直接返回404:

<?php
// 以下代码放在页面最顶部,不要有任何前置输出
$pagename = $_GET['pagename'] ?? '';
// 这里替换为你自己的合法页面校验逻辑,比如查询数据库、读取预定义的配置数组均可
$valid_pages = [
    // main-page的合法值示例:'web-hosting', 'wordpress-hosting'等
    // sub-page的合法值示例:'contact', 'about', 'services'等
];

if (!in_array($pagename, $valid_pages)) {
    http_response_code(404);
    include($_SERVER['DOCUMENT_ROOT'].'/404.php');
    exit;
}

// 原有页面业务逻辑写在下方
?>

可选方案:仅适用于合法页面名称少且固定的场景

如果你的合法页面名称数量很少且不会频繁变更,可以直接在htaccess里写死匹配规则,不符合规则的请求会直接触发404,不需要PHP配合,但灵活性差,新增页面需要同步修改htaccess:

# 仅匹配hosting下的合法页面名称
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^hosting/(web-hosting|wordpress-hosting|vps-hosting)/?$ main-page.php?pagename=$1 [NC,L]

# 仅匹配合法的子页面名称
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(contact|about|services)/?$ sub-page.php?pagename=$1 [NC,L]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.11 10:24:03