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

.htaccess规则部分失效,双博客URL重写问题求助

修复双博客的.htaccess RewriteRule问题

嘿,我来帮你搞定这个问题!看起来你是想给站点里的两个独立博客实现带标题别名的伪静态URL,但对应ss-viewpost.php的规则没生效对吧?大概率是规则冲突或者匹配逻辑的问题,咱们一步步来解决:

先明确核心需求

你需要两个不同的URL模式,分别对应两个PHP文件:

  • 第一个博客:/tms/post/123-my-first-post → 映射到 viewpost.php?id=123
  • 第二个博客:/tms/ss-post/456-my-second-post → 映射到 ss-viewpost.php?id=456

标题别名(slug)只是用来优化SEO和URL可读性,后端只需要文章ID就能从对应数据表取数据,所以我们不需要把slug传递给PHP文件。

修复后的完整.htaccess规则

把下面的规则替换/补充到你的现有配置里,注意规则顺序很重要:

RewriteEngine On
RewriteBase /tms/

# 第一个博客:匹配带前缀post/的URL,提取文章ID
RewriteRule ^post/(\d+)-.*$ viewpost.php?id=$1 [L]

# 第二个博客:匹配带前缀ss-post/的URL,提取文章ID
RewriteRule ^ss-post/(\d+)-.*$ ss-viewpost.php?id=$1 [L]

# 你原来的分类和归档规则(保持不变)
RewriteRule ^c-(.*)$ catpost.php?id=$1 [L]
RewriteRule ^a-(.*)-(.*)$ archives.php?month=$1&year=$2 [L]

关键修复点解释

  1. 用URL前缀区分两个博客:
    给两个博客的URL加上不同的前缀(post/和ss-post/),避免规则互相干扰——如果之前你没加前缀,直接写匹配数字+slug的规则,第一个规则会把所有类似123-xxx的URL都拦截,导致第二个规则永远不会触发。

  2. 精准匹配文章ID:
    用(\d+)只匹配数字格式的文章ID,比(.*)更精准,避免误匹配其他带横杠的URL。后面的.*用来匹配任意标题别名,不管slug是什么都不影响ID的传递。

  3. 规则顺序兼容性:
    因为我们的博客规则有明确前缀,和你原来的c-、a-前缀完全不冲突,所以规则顺序不会影响原有功能的正常运行。

测试验证

  • 访问 http://你的域名/tms/post/123-test-title,应该能正常加载viewpost.php?id=123的内容
  • 访问 http://你的域名/tms/ss-post/456-ss-test-title,应该能正常加载ss-viewpost.php?id=456的内容
  • 原来的分类URL(比如/tms/c-1)和归档URL(/tms/a-10-2024)依然正常工作

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 03:45:13