为什么会出现两个 URL

PbootCMS 默认支持伪静态,但如果你在服务器上没配置好重写规则,访问首页时系统会保留 index.php。此时网站会出现两种可访问路径:

  • https://www.example.com/(不带 index.php)
  • https://www.example.com/index.php(带 index.php)

对于搜索引擎来说,这是两个独立的 URL。如果两个 URL 都能访问且都返回 200 状态码,那么原本应该集中到首页的权重就会一分为二,直接影响首页关键词排名。

解决方案:301 永久重定向

正确的做法是:把带 index.php 的 URL 用 301 永久重定向到不带 index.php 的版本。这样搜索引擎会把权重统一传递给目标 URL。

Nginx 环境

打开站点配置文件(通常在宝塔面板的「网站」→「设置」→「配置文件」中),在 server { ... } 块内添加:

if ($request_uri ~* "^/index\.php(.*)$") {
    return 301 https://$host$1;
}

# 其他重写规则...
location / {
    if (!-e $request_filename) {
        rewrite ^(.*)$ /index.php?$1 last;
    }
}

修改保存后,执行 nginx -t 测试配置,通过后 nginx -s reload 重新加载。

Apache 环境

在网站根目录的 .htaccess 文件中添加:

RewriteEngine On
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s/+index\.php[\s?] [NC]
RewriteRule ^index\.php$ / [R=301,L]
注意:添加规则后一定要先备份原配置文件。改错了可能导致站点无法访问,回滚会麻烦。

验证重定向是否生效

配置完成后,用以下方法验证:

  1. 浏览器访问 https://www.example.com/index.php,观察地址栏是否自动变成 https://www.example.com/
  2. 使用 curl -I 命令查看响应头,确认返回的是 301 Moved Permanently
  3. 在 Chrome 开发者工具 Network 面板中查看请求状态码
$ curl -I https://www.example.com/index.php

HTTP/2 301
location: https://www.example.com/
server: nginx
date: Sat, 30 Aug 2026 08:12:00 GMT

如果看到 301 和 location 头,说明配置成功。

常见问题

改了之后网站打不开怎么办?
大概率是正则写错了,导致所有请求都被重定向到了错误地址。通过 SSH 登录服务器,用 vim 或宝塔文件管理器把刚才添加的规则删掉,然后 nginx -s reload 即可恢复。
为什么不直接用 302?
302 是临时重定向,搜索引擎不会把权重传递给目标 URL。只有 301 才是永久重定向,用于 SEO 场景时应始终使用 301。
URL 结构已经改了,还能恢复吗?
可以。301 重定向是长期生效的,搜索引擎会在几个月内逐步更新索引。但在此之前,旧 URL 的权重会逐步转移到新 URL,期间排名可能会有波动,属于正常现象。
付费阅读 ¥9.9 / 永久

以下为付费内容

解锁后可查看本教程的进阶内容:多站点 301 规则模板、动态参数保留技巧、搜索引擎索引更新周期实测数据等完整方案。

已购买用户请登录后直接查看