我需要重写 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;
}