Мне нужно переписать 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;
}
Странно то, что только URL-адреса непосредственно за wp-content и без статических файлов переписываются правильно:
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 и несколько примеров, но до сих пор не могу заставить его работать.
Большое спасибо, с уважением.
(Я отправляю ответ, потому что для комментирования требуется> 50 репутации)
Почему "$"?
Вы, наверное, захотите этого:
location /blog/wp-content/ {
rewrite ^/blog/wp-content/(.*)$ /wp-content$1 last;
}
Ваше решение не работает, потому что у вас нет регулярного выражения 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;
}