Назад | Перейти на главную страницу

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;
}

Странно то, что только 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;
}