Apache-2.4
Apache:返回位置的靜態字元串
對於*.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
所以這裡沒有影響。)