2017-01-12 2 views
2

Это предложение было задано по телефону SO before, но ответы не были обобщены. Так вот.Как удалить подкаталог с URL-адреса перед тем, как перейти к скрипту?

У меня есть два разных веб-приложения. Они были сделаны на разных серверах в корне. Но теперь они будут помещены в подкаталоги на одном сервере. Нижеприведенный сценарий отправляет подкаталог вместе с URI в сценарии. Это проблема.

старые URLs:

новые URLs:

Магазин сайт видя /store/items/1, когда он хочет просто посмотреть /items/1. То же самое касается сайта backoffice.

Моя попытка:

location /store { 
      try_files @store_site; 
    } 

    location /backoffice { 
      try_files @backoffice_site; 
    } 

    location @store_site { 
      include uwsgi_params; 
      uwsgi_pass unix:/var/run/uwsgi/store_site.sock; 
      proxy_set_header Host $host; 
    } 

    location @backoffice_site { 
      include uwsgi_params; 
      uwsgi_pass unix:/var/run/uwsgi/backoffice_site.sock; 
      proxy_set_header Host $host; 
    } 

Опять же, сайт магазина получает URL-адреса с префиксом /store и BackOffice получает /backoffice. Эти сайты были закодированы, чтобы не ожидать этих префиксов. Мне нужно удалить префикс /store и /backoffice перед отправкой на фактический сайт.

Это правило переписывания правил?

Я пробовал это на основе this SO page, и это не сработало. Я не должен понимать что-то о синтаксисе.

location /store { 
     rewrite ^/store/(.*) /$1; 
     try_files $uri @store_site; 
} 

Update

По-видимому, это работает (добавлено break;) Является ли это полное решение?

location /store { 
     rewrite ^/store/(.*) /$1 break; 
     try_files $uri @store_site; 
} 
+0

Более или менее полное решение.Зависит от деталей вашего сайта. – Dayo

ответ

2

Вам необходимо переписать uri, не перенаправляя перенаправление, как указано, используя break.

В зависимости от деталей вашего набора вверх, должны ли все идти к бэкэнду или должна ли Nginx служить некоторые запросы, такие как статические файлы, вам необходимо либо ...

location /store { 
    try_files $uri @store_site; 
} 

location /backoffice { 
    try_files $uri @backoffice_site; 
} 

location @store_site { 
    rewrite ^/store/(.*) /$1 break; 
    include uwsgi_params; 
    uwsgi_pass unix:/var/run/uwsgi/store_site.sock; 
} 

location @backoffice_site { 
    rewrite ^/backoffice/(.*) /$1 break; 
    include uwsgi_params; 
    uwsgi_pass unix:/var/run/uwsgi/backoffice_site.sock; 
} 

... или

location /store { 
    rewrite ^/store/(.*) /$1 break; 
    include uwsgi_params; 
    uwsgi_pass unix:/var/run/uwsgi/store_site.sock; 
} 

location /backoffice { 
    rewrite ^/backoffice/(.*) /$1 break; 
    include uwsgi_params; 
    uwsgi_pass unix:/var/run/uwsgi/backoffice_site.sock; 
} 
+0

В соответствии с моим ответом ниже, если у вас нет конечной косой черты, nginx соответствует/сохраняет, а также/store5, и/хранить все и т. д. – gubble

1

Я предлагаю вам попробовать это за предмет:

location /store/ { 
    rewrite ^/store/(.*) /$1 break; 
    include uwsgi_params; 
    proxy_set_header Host $host; 
    uwsgi_pass unix:/var/run/uwsgi/store_site.sock; 
} 

Не проверял, но я думаю, что он должен работать.

+0

Я бы хотел не упоминать URL-адреса верхнего уровня из магазина здесь. Это потому, что их много, и я бы перечислил их всех. Невозможно ли просто отрезать/сохранить часть и отправить остальные? – 010110110101

+0

Я вижу. Я изменил его немного, но определенно у места магазина должно быть/слэш на обеих сторонах, иначе/storeajshas будет соответствовать слишком – gubble

 Смежные вопросы

  • Нет связанных вопросов^_^