Nginx重写URL而不是静态文件

我需要重写URL

http://www.domain.com/blog/wp-content/uploads/this-is-a-static-file.jpg 

 http://www.domain.com/wp-content/uploads/this-is-a-static-file.jpg 

我正在使用这个规则:

 location /blog/wp-content$ { rewrite ^/blog/wp-content/(.*)$ /wp-content$1 last; } 

奇怪的是,只有直接在wp-content之后而没有静态文件的URL被正确地重写:

 http://www.domain.com/blog/wp-content/uploads/ => http://www.migayopruebas.com/wp-content/uploads/ 

但是,它有多个子级别或涉及静态文件,它不起作用:

 http://www.domain.com/blog/wp-content/uploads/migayo-trangulacion-laton.jpg => doesn't change 

http://www.domain.com/blog/wp-content/migayo-trangulacion-laton.jpg =>不会改变

任何人都可以指出我正确的方式来做到这一点? 我已经阅读了Nginx的文档和几个例子,仍然无法使其工作。

非常感谢,问候。

您的解决scheme不起作用,因为您没有正则expression式location~字符丢失),并且使用$ ,这是一个正则expression式字符结束位置。

你可以用更简单的方法来做:

 location ~ /blog/wp-content/(?<filename>.+)$ { rewrite ^ /wp-content/$filename last; } 

所以,在这里你在location指令中执行正则expression式捕获,并使用rewrite目的地的捕获部分path。

如果你想使客户端301redirect,请使用以下命令:

 location ~ /blog/wp-content/(?<filename>.+)$ { rewrite ^ http://www.domain.com/wp-content/$filename permanent; } 

(我发表了一个答案,因为需要评论50个声望)

为什么“$”?

你可能想要这个:

 location /blog/wp-content/ { rewrite ^/blog/wp-content/(.*)$ /wp-content$1 last; }