我在按自己想要的方式设置 nginx 时遇到了一些麻烦。我有一个位于 /vagrant/frontend/www 的站点 example.localhost。我的配置可以正常工作,如下所示:
server {
listen 80;
server_name example.localhost;
root /vagrant/frontend/www;
index index.php;
location / {
try_files $uri $uri/ /index.php?$args;
}
location ~ \.php$ {
include /etc/nginx/fastcgi.conf;
fastcgi_pass 127.0.0.1:9000;
}
}
但后来我想在 example.localhost/admin 的地址中添加一个位于 /vagrant/backend/www 的管理站点。我的设置如下:
location /admin {
alias /vagrant/backend/www/;
try_files $uri $uri/ /index.php?$args;
location ~ \.php$ {
include /etc/nginx/fastcgi.conf;
fastcgi_pass 127.0.0.1:9000;
}
}
对“example.localhost/admin”的请求已被处理,但是当 URL 看起来像“example.localhost/admin/site/index”时,看起来 /admin 位置不匹配,因为该请求是在前端处理的...
我已经被这个问题困扰好几天了,任何帮助我都会非常感激!
答案1
当 URL 看起来像“example.localhost/admin/site/index”时
如果你没有文件,/var/backend/www/site/index
你的try_files
指令最后一项将进行内部重定向/index.php
,由外部处理location ~ \.php$
在此配置中,我嵌套了 PHP 的位置,并修复了try_files
要/admin/
重定向到的位置/admin/index.php
。
server {
listen 80;
server_name example.localhost;
root /vagrant/frontend/www;
index index.php;
location / {
try_files $uri $uri/ /index.php;
location ~ \.php$ {
include fastcgi.conf;
fastcgi_pass 127.0.0.1:9000;
}
}
location /admin {
return 301 /admin/;
}
location /admin/ {
alias /vagrant/backend/www/;
try_files $uri $uri/ /admin/index.php;
location ~ \.php$ {
include fastcgi.conf;
fastcgi_pass 127.0.0.1:9000;
}
}
}