我正在尝试将 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 禁止位置问题。(不能使用别名)
这里符号链接完成了所有工作 :) 无需复杂的配置。希望这可以帮助到某些人。