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

如何通过.htaccess实现PHP多文件动态URL重写及参数传递?

.htaccess URL重写方案实现多场景需求

以下是针对你的需求优化后的.htaccess规则,覆盖所有要求并保留原有功能:

RewriteEngine On
RewriteBase /test_2/

# 跳过真实存在的目录、文件,防止重写干扰静态资源访问
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-s

# 需求4:将 /register/123 重写为 insert.php?action=reg&send=ik&id=123
RewriteRule ^register/(\d+)$ insert.php?action=reg&send=ik&id=$1 [L,NC]
# 补充:无ID的register路径重写(如 /register)
RewriteRule ^register$ insert.php?action=reg&send=ik [L,NC]

# 需求1:专属PHP文件的基础重写(无参数场景)
RewriteRule ^search$ search.php [L,NC]
RewriteRule ^blog$ blog.php [L,NC]
RewriteRule ^users$ users.php [L,NC]

# 需求2:同一文件的多参数传递(以users.php为例)
# 示例:/users/view/456 → users.php?action=view&id=456
RewriteRule ^users/(\w+)/(\d+)$ users.php?action=$1&id=$2 [QSA,L,NC]
# 示例:/users/edit/789?mode=batch → users.php?action=edit&id=789&mode=batch(保留额外查询参数)

# 需求3:无限层级路径支持(以search、blog为例)
# 示例:/search/test/test1/test2 → search.php?path=test/test1/test2
RewriteRule ^search/(.*)$ search.php?path=$1 [QSA,L,NC]
# 示例:/blog/category/tech/2024 → blog.php?path=category/tech/2024
RewriteRule ^blog/(.*)$ blog.php?path=$1 [QSA,L,NC]

规则细节说明

  • 基础排除逻辑:开头的三个RewriteCond确保只有当请求的路径不是真实存在的目录、文件时才触发重写,避免覆盖图片、CSS等静态资源的访问。
  • 专属文件规则:直接将简洁路径(如/search)映射到对应的PHP文件,满足不同文件的专属重写需求。
  • 多参数支持:通过正则捕获组((\w+)、(\d+))提取URL中的动态参数,传递给目标PHP文件;QSA标记允许保留URL中额外的查询字符串(如?mode=xxx)。
  • 无限层级路径:使用(.*)捕获斜杠后的所有层级内容,作为path参数传递,PHP端可通过$_GET['path']获取完整路径,再拆分处理,确保任意层级路径不会返回404。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 00:10:41