谈论这个众所周知的解决方案:
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规则在大多数情况下都是失败的。
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的原因之一。