2016-12-26 3 views
1

У меня есть сервер-разработчик, на котором я загружаю клиентские сайты, каждый сайт WordPress имеет свою собственную базу данных и каталог (каждый сайт независим). У меня есть один серверный блок. Моя проблема с симпатичными постоянными ссылками, это работает для меня:Конфигурация NGINX для автоматических хороших ссылок для нескольких сайтов wordpress в подкаталогах

server_name dev.example.tld; 

    location = /favicon.ico { log_not_found off; access_log off; } 
    location = /robots.txt { log_not_found off; access_log off; allow all; } 

    location/{ 
      try_files $uri $uri/ =404; 
      add_header 'Cache-Control' 'no-store, no-cache, must-revalidate, proxy-revalidate, max-$ 
      expires off; 
    } 

    location /site_1/ { 
      index index.php; 
      try_files $uri $uri/ /site_1/index.php?$args; 
    } 

    location /site_2/ { 
      index index.php; 
      try_files $uri $uri/ /site_2/index.php?$args; 
    } 

Я искал способ сделать это один раз, вместо добавления блока определения местоположения для каждого сайта, но не повез.

ответ

1

Вы можете изменить location в регулярном выражении и захватить название сайта:

location ~ ^(?<site>/[^/]+) { 
    try_files $uri $uri/ $site/index.php?$args; 
} 

В качестве альтернативы, добиться того же эффекта с помощью переписывания:

location/{ 
    try_files $uri $uri/ @rewrite; 
} 
location @rewrite { 
    rewrite ^(/[^/]+) $1/index.php last; 
    return 404; 
} 
+0

'site' переменная является url например ** dev.example.tld **? , когда я использовал это, показывает ошибку: – Ritterwise

+0

Извините, вырежьте и вставьте ошибку во втором примере, это должно быть, конечно, '$ 1'. «$ Site» или '$ 1' - это первый сегмент пути URI - например, '/ site_1' или'/site_2' в вашем случае. Если вам нужно имя сервера, используйте: '$ host',' $ server_name' или '$ http_host' (которые все немного отличаются - см. [Эту ссылку для деталей] (http://nginx.org/en/docs/http /ngx_http_core_module.html#var_host)) –