Apache-2.4

Apache:返回位置的靜態字元串

  • May 4, 2021

對於*.well-known*路徑,我想返回一個靜態 JSON 文件/字元串。

使用 nginx,這似乎是可能的,而無需通過在配置文件中指定內容來創建該文件:

location /.well-known/foo {
   return 200 '{"foo": "bar"}';
   default_type application/json;
   add_header Access-Control-Allow-Origin *;
}

apache有類似的可能嗎?這是我到目前為止所擁有的:

<Location "/.well-known/foo">
       # return '{"foo": "bar"}'
       ForceType application/json
       Header set Access-Control-Allow-Origin *
</Location>

除了@João Alves 創造性的答案,您可以通過在 上設置環境變數並使用指令根據此環境變數有條件地設置這些標頭來設置適當的Content-Type和其他自定義標頭。RewriteRule``Header

例如:

ErrorDocument 200 '{"foo": "baz"}'

RewriteEngine On

# Trigger the 200 response AND set an environment variable "JSON"
RewriteRule ^/\.well-known/foo$ - [R=200,E=JSON:1,L]

# Set headers if "JSON" env var is set
Header always set Access-Control-Allow-Origin * env=JSON
Header always set Content-Type application/json env=JSON

請注意,在這種情況下,指令的條件是必要的always Header

ErrorDocument 200但是,如果您應該有其他需要不同響應的 URL ,則上述解決方案僅允許單個響應(即)。如果您ErrorDocument 200稍後聲明另一個,它將覆蓋先前的定義,而不管指令的順序如何。

ErrorDocument您可以改為使用<Location>塊通過 URL 路徑“範圍”和關聯的指令。這也避免了對 mod_rewrite 和額外的 env var 的需要。例如:

<Location /.well-known/foo>
   ErrorDocument 200 '{"foo": "bar"}'
   Redirect 200 /
   Header always set Content-Type application/json
   Header always set Access-Control-Allow-Origin *
</Location>

(由於這個請求沒有映射到靜態文件,ForceType所以這裡沒有影響。)

引用自:https://serverfault.com/questions/1062046