[英].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.