Назад | Перейти на главную страницу

установка подкаталога nginx wordpress

Я пытаюсь разделить корень документов для установок WordPress по подкаталогам.

Корень документа example.com: /var/www/example.com/

Корень документа example.com/xyz: /var/www/example.com-xyz/

после долгого исследования я смог разрешить все сайты WordPress, настроенные, как указано выше.

Я использовал конфигурацию ниже,

root /var/www/example.com/htdocs;
    location / {
                    try_files $uri $uri/ /index.php?$args;

      location ~ \.php$ {
        fastcgi_split_path_info ^(.*\.php)(.*)$;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param PATH_INFO $fastcgi_path_info;
        fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
        fastcgi_pass 127.0.0.1:9000;
      }
    }


    location /xyz {

      alias /var/www/example.com-xyz/htdocs/;
      try_files $uri $uri/ @xyz;

           location ~ \.php$ {
                    fastcgi_split_path_info ^(.*\.php)(.*)$;
                    include fastcgi_params;
                    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
                    fastcgi_param PATH_INFO $fastcgi_path_info;
                    fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
                    fastcgi_pass 127.0.0.1:9000;
            }

    }

    location @xyz {
            rewrite ^/xyz(.*) /xyz/index.php?q=$1;
    }

Это будет работать долго. Но проблема в том, что мне не удалось создать страницу с именем, начинающимся с указанного выше имени подкаталога. Подобно, http://example.com/xyzzz http://example.com/xyz-something

не может быть выполнено, так как вышеуказанный запрос будет соответствовать блоку местоположения подкаталога :(

Итак, я попробовал location = / xyz {}, но не смог включить

location ~ .php $ {} внутри этого :( выдаст ошибку, например

nginx: [emerg] location "\.php$" cannot be inside the exact location "/xyz"

я неправильно делаю конфигурацию? есть ли способ решить эту проблему?

Наконец-то есть решение!

поменял следующее.

mainsite root: /var/www/example.com/htdocs/

created following symlinks under mainsite root

site1 -> /var/www/example.com-xyz/htdocs 
site2 -> /var/www/example.com-site2/htdocs 

и изменил блоки местоположения nginx следующим образом

location / {
        try_files $uri $uri/ /index.php?$args;
      include conf.d/php7.conf;
}

location  /site1/ {

   try_files $uri $uri/ @site1;

   access_log /var/log/nginx/example.com-site1.access.log;
   error_log /var/log/nginx/example.com-site1.error.log;

    include conf.d/php7.conf;   #this filehave normal phpfpm block like "location ~ \.php$ {  } "

 }

 location @site1 {
   rewrite ^/site1(.*) /site1/index.php?q=$1;
 }

NB: location /something/ { alias /var/www/... } Создана проблема с запрещенным местоположением nginx. (нельзя использовать псевдоним)

Здесь символические ссылки сделали всю работу :) Никаких сложных настроек. Надеюсь, это может кому-то помочь.

Вы должны использовать location /xyz/ чтобы избежать проблем с другими URI, которые начинаются с тех же трех букв. Вы можете перенаправить /xyz к /xyz/ с отдельным заявлением. Например:

location = /xyz { rewrite ^ /xyz/ last; }

location /xyz/ {
    alias /var/www/example.com-xyz/htdocs/;
    ...
}

Видеть этот документ для подробностей.