通过htaccess将上传到自定义文件夹的文件限制为登录用户:查找Nginx-而不仅仅是apache-解决方案

时间:2020-11-10 作者:PatrizioRD

谈论这个众所周知的解决方案:

Github

Original discussion

我正在寻找一种简单的方法来处理安装了Nginx的WP,而不仅仅是Apache WP。

Is there any other code-based approach you would recommend, that works fine on any server environment?

到目前为止,在一个安装了Nginx的WP网站上测试了官方存储库中的各种插件之后,我还发现,当web服务器不接受htaccess规则时,其中一些插件就会失败。

在我看来,最好的方法是对这两种情况使用相同的方法:

设置htaccess/nginx web服务器规则,控制向特定/上载子文件夹发出的任何文件请求。我发现在基于Apache的WP上运行良好的规则如下:

RewriteCond %{REQUEST_URI} ^.*wp-content/uploads/restricted/.*
RewriteRule ^wp-content/uploads/(restricted/.*)$ dl.php?file=$1 [QSA,L]
我发现,对于Nginx环境,这几乎是相同的规则,但尽管进行了测试,我仍然无法使其在子文件夹上工作,因此以下仅适用于整个/上载文件夹,不推荐使用:

location ~* /(?:uploads|files)/* {
rewrite /wp-content/uploads/(.*)$ /dl.php?file=$1;

}
此外,只要许多矿山客户在共享主机上安装了自己的设备,要求提供商为单个网站设置nginx规则在大多数情况下都是失败的。

1 个回复
SO网友:Ivan Shatsky

nginx等效于

RewriteCond %{REQUEST_URI} ^.*wp-content/uploads/restricted/.*
RewriteRule ^wp-content/uploads/(restricted/.*)$ dl.php?file=$1 [QSA,L]
将是

location ~ ^/wp-content/uploads/(?<file>restricted/.*) {
    rewrite ^ /dl.php?file=$file last;
}
如果要将此应用于以下文件夹/wp-content/uploads, 使用

location ~ ^/wp-content/uploads/(?<file>(?:restricted1|restricted2|restricted3)/.*) {
    rewrite ^ /dl.php?file=$file last;
}
我认为nginx没有其他解决方案,只能改变它的配置,毕竟它在启动时编译了所有规则,而不是检查每个文件夹.htaccess 在每一个请求上,都是它优于Apache的原因之一。

相关推荐

有没有可能将代理WP MULTISE反向转换为具有Nginx的单独服务器?

最近迁移了一个多站点网络,却发现一些站点使用的主题与服务器的PHP版本不兼容。虽然我正在进行长期修复,但我希望使用NGINX将非工作站点反向代理到旧服务器,同时保持当前工作站点指向新服务器。当我尝试以下操作时,我能够访问旧站点的页面,但静态资产(js、css等)返回404,并且我无法访问任何/wp管理页面。我应该改变什么?这是整个服务器块配置。保存为location /oldsite, 我也将此配置用于其他服务器块。在这种情况下,我的所有WordPress文件都存储在各自独立的/wordpress/ 目录