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

如何用.htaccess将/blog/?p=参数重定向到对应子文件夹URL?

正确的URL重定向解决方案

问题分析

你之前的规则存在两个核心问题:

  1. 正则表达式([0-9]*)仅匹配数字,但你的目标参数是标题字符串(包含字母、连字符等),无法匹配title-of-blog-post这类值
  2. 重写规则^blog/([0-9]+)$同样只针对数字ID,无法处理标题路径,导致跳转后触发404

解决方案

1. 修改根目录/public_html/.htaccess文件

替换你之前添加的代码为以下内容:

RewriteEngine On
RewriteBase /

# 将 /blog/?p=xxx 重定向到 /blog/xxx(永久重定向)
RewriteCond %{THE_REQUEST} \s/blog/\?p=([^\s&]+)\s [NC]
RewriteRule ^ blog/%1? [R=301,L]

# 将 /blog/xxx 内部重写到 /blog/?p=xxx
RewriteRule ^blog/([^/]+)$ blog/?p=$1 [L]

2. 保留/blog/.htaccess原有内容

你现有的/blog/.htaccess已经可以处理内部路由到index.php,无需修改:

Options +FollowSymLinks +ExecCGI
<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{SCRIPT_FILENAME} !-d
    RewriteCond %{SCRIPT_FILENAME} !-f
    RewriteRule ^.*$ ./index.php
</IfModule>

关键说明

  • ([^\s&]+):匹配任意非空白、非&符号的字符,完美适配标题格式(如title-of-blog-post)
  • R=301:表示永久重定向,利于SEO;测试阶段可先用R=302临时重定向,确认无误后再改回301
  • 末尾的?:清除原URL的查询字符串,避免跳转后URL残留?p=xxx
  • 内部重写规则:把干净的路径转换为原有的查询参数格式,确保/blog/下的程序能正确识别请求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 05:24:10