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

如何配置.htaccess实现rest_api路由的通用URL重写?

解决.htaccess URL重写适配rest_api所有方法的问题

首先得指出你之前写的规则为什么没生效——问题出在两个关键地方:

  • 你的正则没有捕获feed/后面的核心内容(比如rest_api/count_products),所以$1是空值,导致重写后的route参数只到extension/feed/,直接丢失了后续的方法路径;
  • 规则完全没处理&key=123456这类额外参数,直接把这部分内容截断了。

根据你的需求(适配rest_api下所有方法,自动给route参数添加extension/前缀),我分两种常见场景给出解决方案:

场景1:访问的URL是无?的路径式参数(即你给出的示例格式)

也就是用户访问 http://teste.com.br/route=feed/rest_api/count_products&key=123456 这种把参数直接写在路径里的格式,用下面的规则就能完美适配:

RewriteEngine On
# 通用匹配所有feed/开头的路径请求,自动给route添加extension/前缀
RewriteRule ^route=feed/(.*)$ index.php?route=extension/feed/$1 [QSA,L]

规则细节解释:

  • ^route=feed/(.*)$:精准匹配路径以route=feed/开头的所有请求,(.*)会捕获后面的所有内容(包括rest_api/xxx这类方法路径,以及&key=yyy这类额外参数);
  • index.php?route=extension/feed/$1:把捕获到的内容拼接到extension/feed/后面,生成符合要求的目标查询参数;
  • QSA:确保原请求的额外参数(比如key)会自动追加到新的查询字符串里,不会丢失;
  • L:表示这是最后一条规则,匹配成功后不再执行后续规则,避免冲突。

场景2:访问的URL是标准带?的查询字符串格式

如果你的实际请求是更标准的格式,比如 http://teste.com.br/?route=feed/rest_api/count_products&key=123456,就需要用RewriteCond来匹配查询字符串:

RewriteEngine On
# 避免循环重写:如果已经是访问index.php,直接跳过后续规则
RewriteRule ^index\.php$ - [L]

# 匹配查询字符串里以route=feed/开头的请求
RewriteCond %{QUERY_STRING} ^route=feed/(.*)$
# 重写根路径请求到index.php,同时替换route参数
RewriteRule ^$ index.php?route=extension/feed/%1 [QSA,L]

额外注意事项:

  1. 确保你的Apache服务器已经启用了mod_rewrite模块;
  2. 网站根目录的.htaccess文件要能生效,需要在Apache配置里把对应目录的AllowOverride设置为All;
  3. 测试时可以直接访问目标URL检查返回内容,也可以开启Apache的RewriteLog来调试规则匹配情况。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 06:31:48