如何通过.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
相关产品推荐
相关产品推荐

