我已经搜索和搜索,在任何地方都找不到这个问题。
我们的设置并不理想,这与 API 有关。
/.htaccess 文件
RewriteEngine On
RewriteBase /
RewriteRule ^api$ /system/api.php [L,NC]
/api/2/.htaccess 文件
RewriteEngine On
RewriteBase /api/2/
RewriteRule ^ index.php [QSA,L]
文件夹结构
/
/.htaccess
/api
/2
/index.php <--- My API 2 file
/.htaccess
/system
/api.php
问题
我需要用户能够在 /api 或 /api/ 访问旧版 API,直到我们的新 API 准备就绪。
我也需要用户能够在 /api/2/ 访问新的 API。
.htaccess,mod_rewrite 忽略 /api$ 规则上的 $(字符串结尾)。那里没有规则可以忽略目录,那么为什么要这样做呢?
应该发生什么-至少我想发生什么
对 /api?URLParam=Hello 的请求 - 应该导致请求被路由到 /system/api.php
对 /api/2?URLParam=Hello 的请求 - 应该导致请求转到 /api/2/index.php
实际发生了什么
对 /api?URLParam=Hello 的请求 - 这些返回一个 301 重定向到对 /api/ 的请求(注意尾部斜杠) - 这通常不是问题,但我们有很多对 /api 的 jQuery POST 调用(没有尾部斜杠)。当它们被重定向时,POST 数据丢失,导致对 /api/ 的 API 调用失败
对 /api/2?URLParam=Hello 的请求 - 工作正常。
我试过的
- 如您所见,基本的 htaccess 文件。
- 忽略 /api 和 /api/
- 规则排序
- -f -d 标志两者!并且没有逆变器。
临时修复
当我删除 /api/ 目录时,对 /api?Param=Hello 的调用完全没有任何问题,没有 301 重定向。但显然这会停止 /api/2/ 调用。
我无法弄清楚 - 任何帮助将不胜感激。
谢谢,
乔什