我实际上使用nginx作为我的网络服务器即时尝试使用此方法拒绝所有子目录访问:
location / {
root /usr/share/nginx/html/project;
index index.html index.htm index.php;
}
location ~ ^/subdir/ {
allow 192.168.1.0/24;
deny all;
try_files $uri $uri/ /index_subdir.php?$query_string;
}
但是nginx试图在项目文件夹中找到index_subdir.php。
我希望你能帮助我。
亲切的问候!!!
答案 0 :(得分:1)
您可能需要进行一些更改:
server {
root /usr/share/nginx/html/project;
index index.html index.htm index.php;
location / {
}
location ~ \.php$ {
...
}
location ^~ /subdir {
allow 192.168.1.0/24;
deny all;
try_files $uri $uri/ /subdir/index_subdir.php?$query_string;
location ~ \.php$ {
...
}
}
}
通常,root
和index
指令放在server
块级别,以便所有location
块继承相同的值。有关详细信息,请参阅this document。
我假设您有一个location ~ \.php$
块,当前执行所有PHP脚本。
我的示例使用带有^~
修饰符的前缀位置,而不是正则表达式位置。修饰符使其优先于server
块中的位置。有关详细信息,请参阅this document。
try_files
指令的最后一个元素是一个URI,这意味着它必须包含/subdir
前缀,如果您特别想要该文件夹中的文件。有关详细信息,请参阅this document。
您需要在location ~ \.php$
块中复制另一个location ^~ /subdir
,以便PHP脚本受到相同访问规则的保护。