我有一台NGINX服务器,我使用Apache-utility来实现密码要求(.htpasswd)。它一切正常。以下这项工作很好:
example.com/admin
example.com/admin/
example.com/admin/index
...但
当我输入example.com/admin/index.php
并且根本不输入任何密码并按" abort"服务器显示index.php(没有任何CSS或JS文件)。我认为我的PHP-FPM就是问题所在。请看一下:
location / {
try_files $uri $uri.html $uri/ @extensionless-php;
index index.html index.htm index.php;
}
location @extensionless-php {
rewrite ^(.*)$ $1.php last;
}
location /admin {
auth_basic "Restricted";
auth_basic_user_file /admin/.htpasswd;
}
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$
}
答案 0 :(得分:1)
查看问题中的最后两个位置:
location ^~ /admin {
auth_basic "Restricted";
auth_basic_user_file /admin/.htpasswd;
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
}
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
添加^~
修饰符使location ^~ /admin
块优先于其他正则表达块(特别是现有的location ~ \.php$
块)。因此,身份验证规则统一应用于以/admin
开头的任何URI。有关详细信息,请参阅this document。
为了避免破坏PHP,location ~ \.php$
块中的location ^~ /admin
块会重复,以处理以/admin
开头并以.php
结尾的URI。