我是 nginx 的新手,我想要做的是捕获所有图像请求 (*.jpg|png|gif) 并将它们转发到根范围之外的 php 脚本。
我当前的工作脚本是这样的:
server {
index index.php;
# PHP-FPM
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php5-fpm.sock;
}
# Images handler
root /var/www/images-handler;
location ~* \.(gif|jpg|png) {
rewrite ^ /img.php last;
}
}
问题是我必须将root
变量更改为/var/www/website-contents
。由于website-contents
和images-handler
没有相同的父目录,我将一个root
变量添加到我的location
段中,如下所示:
root /var/www/website-contents;
location ~* \.(gif|jpg|png) {
root /var/www/images-handler;
rewrite ^ /img.php last;
}
但它不起作用。所有图像都返回 404 响应。
我是否有分别创建/var/www
根目录、添加website-contents
和和到images-handler
它们各自的location
段中?我应该为里面创建一个符号链接吗?/
~* \.(gif|jpg|png)
/var/www/images-handler
/var/www/website-contents
有没有更好的办法来解决这一切呢?
多谢。
答案1
location ~ \.php$
目前,所有 php 脚本都由您的块执行,并root
使用您提供的。如果您想使用不同的根目录执行 php 脚本,则需要覆盖该位置。有多种方法可以实现这一点。对于一个 php 脚本来说,location =
最简单的方法是使用 。例如:
root /var/www/website-contents;
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php5-fpm.sock;
}
location ~* \.(gif|jpg|png) {
rewrite ^ /img.php last;
}
location = /img.php {
root /var/www/images-handler;
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php5-fpm.sock;
}