Я пытаюсь разделить корень документов для установок 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/;
...
}
Видеть этот документ для подробностей.