繁体   English   中英

.htaccess 规则重定向到默认 API 版本

[英].htaccess rule to redirect to default API version

在我的 PHP API 中,我想将不包含版本号的请求重定向到默认版本。

例如,一个请求

/api/<endpoint>

将重定向到

/api/v2/<endpoint>

如果 v2 是 API 的默认版本。 包含版本号的请求应该正常工作。

文件结构是这样的:

  • api
    • v1
    • v2
      • (端点)

我很难理解 .htaccess 语法,以及需要什么 Apache 表达式。 到目前为止,我尝试的是检查 URL 中是否包含版本号:

RewriteEngine On

# Redirect requests from /api/ to current version of the API
RewriteCond %{DOCUMENT_ROOT} !^(v[0-9])$
RewriteRule ^?$ /v1/$1

有没有人有这个问题的经验或知道如何解决这个问题?

我假设您的意思是内部重写,而不是外部 3xx“重定向”?

您可以在根.htaccess文件中使用 mod_rewrite 执行以下操作:

# Set env var to default API version
SetEnvIf ^ ^ DEFAULT_API_VERSION=2

# Rewrite requests from /api/ to default version of the API if not explicitly set
RewriteRule ^api/(?!v\d+/)(.*) /api/v${ENV:DEFAULT_API_VERSION}/$1 [L]

环境变量只是为了方便避免修改后面的规则。

完整的“版本”路径段假定为v后跟任意数量的数字,后跟斜杠。

这使用负前瞻来避免匹配已经包含版本字符串作为第二个路径段的 URL。 否则/api/之后的 URL 路径将在$1反向引用中捕获并用于替换字符串。

上面将重写如下:

  • /api/v1/<endpoint> - 没有变化
  • /api/<endpoint> - 重写为/api/v2/<endpoint>
  • /api/ - 重写为/api/v2/
  • /api/v1234/ - 没有变化
  • /api/v1234 (无斜杠) - 重写为/api/v2/v1234
  • /api/v2.1234/foo - 重写为/api/v2/v2.1234/foo

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM