Nginx 重写 URL 但不重写静态文件

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 文档和几个示例,但仍然无法使其工作。

非常感谢,问候。

答案1

您的解决方案不起作用,因为您没有正则表达式location~缺少字符),并且您以$正则表达式字符结束位置。

你可以用更简单一点的方式来做:

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

因此,在这里您在指令中执行正则表达式捕获location,并将捕获的路径部分与rewrite目标一起使用。

如果您想进行客户端 301 重定向,请使用以下命令:

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

答案2

(我发布答案是因为评论需要 >50 声望)

为什么是“$”?

你可能想要这个:

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

相关内容