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-контентом и без статических файлов корректно переписываются:

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 и несколько примеров и до сих пор не могу заставить его работать.

Большое спасибо, привет.

2 ответа

Решение

Ваше решение не работает, потому что у вас нет регулярного выражения 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;
}

(Я отправляю ответ, потому что>50 репутации необходимы, чтобы комментировать)

Почему "$"?

Вы, вероятно, хотите это:

location /blog/wp-content/ {
        rewrite ^/blog/wp-content/(.*)$ /wp-content$1 last;
}
Другие вопросы по тегам