htaccess到nginx(nginx下的水印图片)

我最近安装了NGINX作为我的apache服务器的反向代理来处理静态文件。 到目前为止,一切正常,除了事实上我不能再为我的图像加水印了。

Apache的.htaccess是这样的:

<IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L] RewriteRule ^(.*)wp-content/upload/(.*\.(jpg|JPG|jpeg|png))$ $1watermark.php?src=wp-content/upload/$2 </IfModule> 

这是我目前的虚拟主机nginx.conf(这是不工作的水印):

 server { listen 80; server_name mydomain.com www.mydomain.com ; error_log /var/www/vhosts/mydomain.com/statistics/logs/error_log.nginx warn; location / { proxy_pass http://www.mydomain.com:8080$request_uri; include /etc/nginx/proxy.conf; } location ~* ^.+\.(jpg|jpeg|gif|png|css|zip|tgz|gz|rar|bz2|doc|xls|exe|pdf|ppt|txt|tar|wav|bmp|rtf|js|ico|swf)$ { root /var/www/vhosts/mydomain.com/httpdocs; expires 7d; } #This here, isnt working# location /wp-content/upload/ { rewrite ^/(.*)wp-content/upload/(.*\.(jpg|JPG|jpeg|png))$ /$1watermark.php?src=wp-content/upload/$2; } } 

但根本不工作。 我读了重写nginx的文档,我一直在尝试几天,但仍然无法find使其工作的方式。

location ~ \.(jpg|jpeg|png|gif|swf|flv|pdf)$像这样看起来很熟悉吗? 这是捕捉静态文件请求的一个非常标准的位置。 最有可能的是你也拥有它,但是我显然不知道,因为你决定只显示你的Nginxconfiguration的一行。

现在,由于我们已经阅读了关于最基本的nginx块之一的文档: 位置 ,我们知道一些位置优先于其他位置,事实上,我们知道nginx逻辑说,因为你可以使正则expression式位置真正具体,假设匹配正则expression式位置应该首先使用。

我们也知道location /是最不具体的,我们可以通过左前缀匹配/匹配每个可能的URI。

因此,如果存在另一个匹配位置,那么位置/将不被使用。 考虑到我的回复的第一部分的静态请求,以及您将重写置于位置的信息,我们现在可能知道为什么了!

如果它仍然不起作用,那么请提供您的configuration,以便人们可以使用一些实际的数据。

现在expression式看起来是一样的,除了nginx重写中的初始斜杠。 既然你已经盯着这几天,我会假设你已经考虑过这个部分。

确保具有该重写的位置块实际上匹配图像请求(并且不被其他位置块覆盖)。 当你确信这是事实时,把适当的标志添加到你的nginx重写行。 我猜在这种情况下break是适当的。