我们有一个旧的代码库,它将所有内容都转储到公共文档根目录中,因此想要将可以访问的文件列入白名单。
这实际上是我们当前的配置
server {
root /home/forge/www.our-website.com/;
index index.html index.htm index.php;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
error_page 404 /index.php;
location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/var/run/php/php7.3-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
}
location ~ /\.(?!well-known).* {
deny all;
}
}
我们有一个index.php
,所有动态内容都会通过它进行路由。
我们还有一个名为的目录assets
,其中包含文档根目录中的静态 css/images/js 等。
我们如何才能仅允许访问 index.php 文件和 assets 目录的内容?
谢谢 :)
答案1
尝试这个
server {
root /home/forge/www.our-website.com/;
index index.php;
#Deny access to everything that don't match
location / { deny all; }
#Allow root directory so requests could be passed to index.php
location = / {allow all;}
#Allow index.php
location = /index.php {
allow all;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/var/run/php/php7.3-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
#Allow assets directory
location /assets/ { allow all;}
}