适用于nginx的RemoveHandler

时间:2013-03-17 22:07:07

标签: nginx webserver debian

在我的网站中,用户可以上传他们的文件并拥有该文件的简短网址。 在此之前我使用了apache webserver但现在我想切换到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网络服务器上执行此操作?

1 个答案:

答案 0 :(得分:1)

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

我认为uploads文件夹可能包含.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.