2011-10-03 50 views
1

你如何調用獲取一個超出根目錄進行處理的文件。我正在閱讀有關別名,並無法得到它的工作。所以我嘗試在該位置添加一個新的根目錄,但沒有運氣。nginx如何在根外包含重寫

這是我的配置文件

server { 
    listen 443; 
    server_name domain.com; 

    --- 

    root ../var/www/domain/public_html; 


    # works as being called form within the root 
    location /login { 
    rewrite ^/login /account/login permanent; 
    } 

#need to 

    location /validation/code.png { 

    root /var/www/domain/include; 

    rewrite ^/validation/code.png /captcha/display_captcha.php; 
    } 

} 

回答

3

你重寫PNG文件到PHP文件的切開。這會爲/captcha/display_captcha.php創建一個子請求。在你的配置中是否有php的位置?假設php位置使用通用根,當子請求遇到這種情況時,將不會找到/captcha/display_captcha.php,您將收到404錯誤。

最好的辦法是複製php的位置,並專門爲php文件創建一個php位置。

server { 
    listen 443; 
    server_name domain.com; 
    root /var/www/domain/public_html; 

    ... 

    location = /validation/code.png { 
     rewrite ^/validation/code.png /captcha/display_captcha.php; 
    } 
    location ~ ^/captcha/display_captcha.php { 
     root /var/www/domain/include 
     ... 
     # copy php processing code from normal php location. 
    } 
} 

更妙的是,只使用直接在HTML和降 '/validation/code.png' 完全 '/captcha/display_captcha.php'。