2016-12-26 7 views
0

У меня есть следующее правило перезаписи:Nginx переписать переключатели каталоги

location ^~ /assets { 
    rewrite_log on; 
    rewrite ^/assets/(.*)/(.*)$ /websites/$host/themes/$1/assets/$2 break; 
} 

Так что, когда я прошу http://localhost/assets/theme1/css/style.css я ожидаю, что переписать его следующим образом:

/websites/localhost/themes/theme1/assets/css/style.css

Вместо этого, он переписывает просьба об этом:

/websites/localhost/themes/theme1/css/assets/style.css

Но, когда я изменить правила перезаписи:

rewrite ^/assets/(.*)/test/(.*)$ /websites/$host/themes/$1/assets/$2 break;

И я прошу http://localhost/assets/theme1/test/css/style.css все работает просто отлично.

Почему он переключает assets с css?

ответ

0

А, я думаю, я немного смутился о том, как работает регулярное выражение. ;) Это отлично работает:

rewrite ^/assets/([^/]+)/(.*)$ /websites/$host/themes/$1/assets/$2 break;

Я соответствует все в $1, который был theme1/css, а потому, что я хочу только название темы, я должен исключить / характер. Спасибо в любом случае за это!

+0

В качестве альтернативы вы можете сделать первый захват менее жадным, используя '(. *?)' Вместо '(. *)'. –

+0

Спасибо! Я тоже попробую. :) – SomeCode