簡體   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