伪静态是把 /article.php?id=123 变成 /article/123.html 的技术。它对 SEO 的作用常被夸大,但对用户体验和链接美观确实有用。真正的问题在于:配错了,整站内页全 404,而首页正常,很容易被忽略。
一、先搞清楚你的环境
Apache 用 .htaccess 文件,Nginx 用 location 配置。两者语法完全不同,抄错一个字符就失效。
判断方法:宝塔面板的"网站"里能看到运行环境;或者访问一个不存在的路径,看 404 页面是 Apache 的还是 Nginx 的。
二、五种常见规则对照
1. 文章详情页
目标:/article/123.html → /article.php?id=123
# Apache
RewriteRule ^article/([0-9]+)\.html$ article.php?id=$1 [L,QSA]
# Nginx
rewrite ^/article/([0-9]+)\.html$ /article.php?id=$1 last;
2. 栏目列表页
目标:/list/12_3.html(栏目 12,第 3 页)→ /list.php?cid=12&page=3
# Apache
RewriteRule ^list/([0-9]+)_([0-9]+)\.html$ list.php?cid=$1&page=$2 [L,QSA]
# Nginx
rewrite ^/list/([0-9]+)_([0-9]+)\.html$ /list.php?cid=$1&page=$2 last;
3. 去掉 index.php
# Apache
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L]
# Nginx
location / {
try_files $uri $uri/ /index.php?$query_string;
}
4. 强制 HTTPS 与去 www
# Apache
RewriteCond %{HTTPS} !=on
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]
# Nginx
if ($scheme != "https") {
return 301 https://$host$request_uri;
}
5. 旧链接 301 到新链接
# Apache
Redirect 301 /old-page.html /new-page
# Nginx
location = /old-page.html { return 301 /new-page; }
三、宝塔里在哪配
网站 → 设置 → 伪静态,选对应程序的规则模板,或者直接粘贴自定义规则。Nginx 改完要重载配置(宝塔会自动重载)。Apache 的 .htaccess 放在网站根目录,改完立即生效。
注意:Nginx 的 rewrite 只对当前 server 块生效,写在 location 里可能不执行。不确定就写在 server 层。
四、验证方法
- 访问一个新发布的文章,看 URL 是不是伪静态后的形式。
- 访问一个不存在的伪静态 URL,应该返回 404 而不是 500。
- 带参数的旧 URL 访问,应该 301 到新 URL。
- 用 curl 看返回头:
curl -I https://站点/xxx.html,状态码应为 200。
五、三个常见坑
- 规则顺序:Nginx 的 rewrite 按顺序匹配,把宽泛规则放前面会吃掉后面的精确规则。
- 大小写:Apache 默认区分大小写,URL 里的字母大小写不一致会 404。
- 中文 URL:伪静态里带中文会变成一串编码,既不美观也容易出错,建议用拼音或英文 slug。
常见问题
伪静态对排名有帮助吗
间接有帮助。URL 含关键词、层级清晰,对点击率和抓取友好度有正向作用,但不是排名核心因素。别为了伪静态牺牲稳定性。
改了伪静态旧链接怎么办
必须做 301。否则已有的收录全部失效,流量直接归零。
为什么首页正常内页 404
九成是伪静态没生效,或者规则写错。先看 Nginx 错误日志,再检查规则文件是否被正确加载。
URL 结构定好之后,别轻易改。相关原则见网站URL结构设计。