Nginx

Nginx 重寫規則 ‘^/(a-z0−9一種−和0−9a-z0-9{32}).png$’ 不工作(用於在 Apache 上工作)

  • January 24, 2013

我有這些重寫規則(我都嘗試過,但都無濟於事):

location ~* "^/([a-z0-9]{32})\.png$" {
 rewrite ^ /index.php?page=log&id=$1 last;
} 

location ~* "/(?<hash>[a-z0-9]{32})\.png" {
 rewrite ^ /index.php?page=log&id=$hash;
}

location / {
 try_files $uri $uri/ @rewrites;
}

location @rewrites {
 rewrite "^/([a-zA-Z0-9]{32})\.png$" /index.php?page=log&id=$1 last;
 #...
}

基本上,我希望 URLhttp://example.com/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.png將參數實際傳遞給我的index.php腳本,並且在腳本中,我得到了:

$db->save_hash($_GET['id']);
header('Content-type: image/png');
readfile('images/beacon.png');
break;

但是 nginx 給了我一個“未找到”,但其他重寫工作正常。是什麼賦予了?

根據location指令如何工作的 nginx 文件:

位置可以由前綴字元串或正則表達式定義。… 正則表達式的搜尋在第一次匹配時終止,並使用相應的配置。

根據您自己對這個問題的回答中的附加資訊,您似乎打算在同一時間同時應用多個位置指令,根據明確的文件,這是明確不允許的。

請記住,nginx 在設計上更快更乾淨。所以,不要指望怪癖!

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