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

如何通过.htaccess映射/books、/books/及/books/<url_slug>路径?

用.htaccess映射/books、/books/及/books/<url_slug>路径的配置问题

我尝试通过.htaccess将请求映射到/books、/books/或/books/<url_slug>路径,现有配置代码如下:

Options All -Indexes

RewriteEngine On
RewriteBase /

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^/]+)/?$ $1 [R=301,L]

# Map /books/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^books$ book.php [NC,L,QSA]

执行结果:
结果截图

book.php代码:

<?php

echo '<h1>Books</h1>';

?>

问题分析与修正方案

现有配置仅处理了/books(无尾斜杠)的请求,未覆盖/books/和/books/<url_slug>的场景,且第一条规则会将/books/重定向为/books,若需同时支持三种路径,可按以下方式修改配置:

方案1:支持所有目标路径(不强制无尾斜杠)

注释或移除强制无尾斜杠的规则,添加匹配所有目标路径的规则:

Options All -Indexes

RewriteEngine On
RewriteBase /

# 映射/books、/books/及/books/<url_slug>到book.php
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^books(/.*)?$ book.php [NC,L,QSA]
  • ^books(/.*)?$ 匹配/books、/books/及任意/books/<url_slug>路径
  • NC 忽略大小写,L 终止后续规则执行,QSA 保留请求的查询字符串

方案2:保留强制无尾斜杠规则(仅排除books路径)

若仍需对其他路径强制无尾斜杠,可添加排除条件:

Options All -Indexes

RewriteEngine On
RewriteBase /

# 排除books路径,其他单级目录强制重定向为无尾斜杠
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !^/books/?$
RewriteRule ^([^/]+)/?$ $1 [R=301,L]

# 映射/books、/books/及/books/<url_slug>到book.php
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^books(/.*)?$ book.php [NC,L,QSA]

扩展:在book.php中获取url_slug

若需要处理/books/<url_slug>中的slug参数,可修改book.php:

<?php
echo '<h1>Books</h1>';
// 提取url_slug
$slug = trim(str_replace('/books', '', $_SERVER['REQUEST_URI']), '/');
if (!empty($slug)) {
    echo "<p>当前书籍:$slug</p>";
}
?>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 18:52:47