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