Php 不同api版本的重写规则

Php 不同api版本的重写规则,php,.htaccess,api,mod-rewrite,slim,Php,.htaccess,Api,Mod Rewrite,Slim,我正在为我的Slim Api寻找一个重写规则,将其放入.htaccess中,允许我使用不同的Api版本,例如: i.e. v1/something -> v1/index.php v1/something/something -> v1/index.php i.e. v2/something-> v2/index.php v2/something/something -> v2/index.php i.e. p_v1/something-> p_v1/index

我正在为我的Slim Api寻找一个重写规则,将其放入.htaccess中,允许我使用不同的Api版本,例如:

i.e.
v1/something -> v1/index.php
v1/something/something -> v1/index.php

i.e.
v2/something-> v2/index.php
v2/something/something -> v2/index.php

i.e.
p_v1/something-> p_v1/index.php
p_v1/something/something -> p_v1/index.php
项目文件夹结构如下所示:

  • 原料药
    • p_v1
    • v1
    • v2
      • index.php
      • 其他
提前谢谢你的帮助

编辑

这个很好用:

RewriteRule ^ v1/index.php [QSA,L]
但是如果只使用v1(正如预期的那样),我需要找到适用于每个版本的api的东西

编辑2

目前,我发现了一种解决方法,即手动添加每个新的api版本:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^v1/(.*)$ v1/index.php

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^p_v1/(.*)$ p_v1/index.php

但是我仍然在寻找一些自动化的东西。

您还没有定义初始版本指定之后的原始请求URI是由这个规则处理的,所以我假设index.php中的脚本可以处理这个问题

RewriteEngine On
RewriteRule ^/([A-z0-9_\.\-]+)/(.*)$ /$1/index.php [NC]

注意。这将在第一个斜杠之前使用任何字母数字字符(加下划线和连字符),并将其用作提供服务的目录。它还允许在版本指示符后面没有任何内容的请求(如
http://example.api.com/v1/

对apache2使用类似nginx的指令
try_files
,你可以说apache2,例如,你可以看到这个问题,我不明白如何将其应用于我的问题,你能给我举个例子吗?对不起(我不明白你的问题。我不知道如何使用nginx来解决我的问题。我这样说就像nginx指令
try_files
它只是一个例子。你需要
RewriteCond
dericive是的,Slim Fragmework正在处理所有事情,我只需要重定向到正确的index.php,实时到请求的版本.你给我的是我需要的,但给了我500个错误..我在问题中添加了一个编辑,但仍然没有解决我的问题,thanks@dvdciri-对不起,这会教我不要正确阅读我键入的内容。经过编辑,现在应该可以使用了。注意,我添加了一个文字。(点)到斜杠前的匹配字符,以防需要
http://example.api.com/v1.1/something
好的,它的工作原理是,我有这样的
website.com/p_v1/wishes
,但如果我有这样的
website.com/p_v1/user/login
,它就不起作用了。最后一个错误是500one@dvdciri-已编辑。已修复。(承诺):)