[英].htaccess rule to redirect to default API version
在我的 PHP API 中,我想将不包含版本号的请求重定向到默认版本。
例如,一个请求
/api/<endpoint>
将重定向到
/api/v2/<endpoint>
如果 v2 是 API 的默认版本。 包含版本号的请求应该正常工作。
文件结构是这样的:
我很难理解 .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.