Nginx 别名和 try_files 到子文件夹不起作用
Nginx alias and try_files to subfolder doesn't work
当我将 php 文件放入 /home/tim_test 时,它工作正常
当我将文件放入 /home/tim_test/hmm 时,它不起作用。为什么不呢?
server {
listen 80;
root /home;
index index.php;
location /admin {
alias /home/admin/;
try_files $uri $uri.html $uri/ /home/admin/;
index index.html index.htm index.php;
}
location /tim_test/ {
alias /home/tim_test/;
try_files $uri $uri.html $uri/ /home/tim_test/;
index index.html index.htm index.php;
}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
location ~ \.php$ {
try_files $uri =404;
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
我尝试将我的文件编辑成这样以反映文件夹更改,但它不起作用,当我在浏览器中访问 /tim_test 时收到 403 禁止访问
location /tim_test/ {
alias /home/tim_test/hmm/;
try_files $uri $uri.html $uri/ /home/tim_test/hmm/;
index index.html index.htm index.php;
}
谢谢!我很困惑。我尝试了 100 多次 nginx 重启和不同的事情。
编辑:如果我在 chrome 上去那里,我会收到 404 not found,我想我只是在 firefox 上收到 403,因为我尝试多次访问该站点。无论哪种方式,它都不起作用。
nginx
上有一个关于 alias
和 try_files
指令的 very old open bug。
关于您的第一个配置文件,两个 alias
指令是不必要的,因为两个位置块都继承了 root
的值并附加了位置的值。
此外,try_files
指令(/home/admin/
和 /home/tim_test/
)的最后一个元素不是 URI。
第一个配置文件应该是:
root /home;
location /admin {
try_files $uri $uri.html $uri/ /admin/;
index index.html index.htm index.php;
}
location /tim_test/ {
try_files $uri $uri.html $uri/ /tim_test/;
index index.html index.htm index.php;
}
关于子文件夹 hmm
。除了 try_files
指令的最后一个元素(已在上面解决)之外,配置看起来不错。这意味着问题可能与 alias
/ try_files
交互有关。
alias
的替代方案是内部重写,但将目标 URI 放在源 URI 的命名空间内可能会使解决方案变得不必要的困难。
当我将 php 文件放入 /home/tim_test 时,它工作正常
当我将文件放入 /home/tim_test/hmm 时,它不起作用。为什么不呢?
server {
listen 80;
root /home;
index index.php;
location /admin {
alias /home/admin/;
try_files $uri $uri.html $uri/ /home/admin/;
index index.html index.htm index.php;
}
location /tim_test/ {
alias /home/tim_test/;
try_files $uri $uri.html $uri/ /home/tim_test/;
index index.html index.htm index.php;
}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
location ~ \.php$ {
try_files $uri =404;
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
我尝试将我的文件编辑成这样以反映文件夹更改,但它不起作用,当我在浏览器中访问 /tim_test 时收到 403 禁止访问
location /tim_test/ {
alias /home/tim_test/hmm/;
try_files $uri $uri.html $uri/ /home/tim_test/hmm/;
index index.html index.htm index.php;
}
谢谢!我很困惑。我尝试了 100 多次 nginx 重启和不同的事情。
编辑:如果我在 chrome 上去那里,我会收到 404 not found,我想我只是在 firefox 上收到 403,因为我尝试多次访问该站点。无论哪种方式,它都不起作用。
nginx
上有一个关于 alias
和 try_files
指令的 very old open bug。
关于您的第一个配置文件,两个 alias
指令是不必要的,因为两个位置块都继承了 root
的值并附加了位置的值。
此外,try_files
指令(/home/admin/
和 /home/tim_test/
)的最后一个元素不是 URI。
第一个配置文件应该是:
root /home;
location /admin {
try_files $uri $uri.html $uri/ /admin/;
index index.html index.htm index.php;
}
location /tim_test/ {
try_files $uri $uri.html $uri/ /tim_test/;
index index.html index.htm index.php;
}
关于子文件夹 hmm
。除了 try_files
指令的最后一个元素(已在上面解决)之外,配置看起来不错。这意味着问题可能与 alias
/ try_files
交互有关。
alias
的替代方案是内部重写,但将目标 URI 放在源 URI 的命名空间内可能会使解决方案变得不必要的困难。