1

在我的网站中,用户可以上传他们的文件并拥有该文件的短网址。在此之前我使用 apache 网络服务器,但现在我想切换到 nginx。

在 apache 中,我使用此代码段删除了一些文件上传到该目录的 php 处理程序:

<Directory /var/www/unkown-user-data/uploads>
RemoveHandler .php .phtml .php3 .php5
RemoveType .php .phtml .php3 .php5
php_flag engine off
AddHandler default-handler .php
</Directory>

但是现在,我应该如何在 nginx 网络服务器上执行此操作?

4

1 回答 1

1

Nginx 没有 removehandler 指令。您将位置块添加到服务器不同类型的请求。

我假设上传文件夹可能有 .php .phtml .php3 .php5 文件,当从该文件夹请求时,您不想执行它们。这是我的建议:

location ^~ /uploads/ {
  root /var/www/unkown-user-data;
  expires max;
}

注意:“^~”很重要(意味着比正则表达式“~”块具有更高的优先级)。否则,正则表达式位置块,例如

location ~ \.php$ {
  ...
}

会先匹配,会错误执行php脚本。这是 nginx wiki 中的匹配顺序:

1. Directives with the "=" prefix that match the query exactly (literal string). If found, searching stops.
2. All remaining directives with conventional strings. If this match used the "^~" prefix, searching stops.
3. Regular expressions, in the order they are defined in the configuration file.
4. If #3 yielded a match, that result is used. Otherwise, the match from #2 is used.
于 2013-03-17T23:44:30.503 回答