2

我已经搜索和搜索,在任何地方都找不到这个问题。

我们的设置并不理想,这与 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/ 调用。

我无法弄清楚 - 任何帮助将不胜感激。

谢谢,

乔什

4

1 回答 1

2

通过使用关闭斜杠DirectorySlash Off并在您的 : 中添加可选的斜杠root .htaccess

/.htaccess 文件

DirectorySlash Off

RewriteEngine On
RewriteBase /
RewriteRule ^api/?$ /system/api.php [L,NC]
于 2013-10-25T10:01:35.117 回答