nginx如何在root之外包含重写

时间:2011-10-03 18:36:56

标签: 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;
  }

}

1 个答案:

答案 0 :(得分: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中直接使用'/captcha/display_captcha.php'并完全删除'/validation/code.png'。