nginx wordpress 子目录安装

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"

我是否以错误的方式进行了配置? 有什么办法可以解决这个问题吗?

答案1

您应该使用location /xyz/来避免其他以相同三个字母开头的 URI 出现问题。您可以使用单独的语句重定向/xyz/xyz/。例如:

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

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

这个文件了解详情。

答案2

终于得到解决方案了!

更改了以下内容。

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;
 }

注意:location /something/ { alias /var/www/... } 创建了 nginx 禁止位置问题。(不能使用别名)

这里符号链接完成了所有工作 :) 无需复杂的配置。希望这可以帮助到某些人。

相关内容