nginx友好的URI,访问拒绝不友好的请求

时间:2015-10-07 22:39:32

标签: linux security nginx

我目前有一个nginx配置,可以使用“/ contact”创建对“/contact.php”等文件的请求。我找到了一个解决方案,可以将任何.php请求重定向到友好的同行,但是,我认为可能有更优雅的解决方案。

是否可以对URI进行403或404请求,例如“/articles/index.php”或“/ articles / index”(请注意,友好的URI重写已启用)并且仅通过“/ articles /”接受请求“哪个仍会加载”/articles/index.php“文件?

基本上,我希望任何目录中的任何“/ index”或“/index.php”或者403或404的.php请求,并且只接受友好的无扩展请求或目录root /加载index.php(不带它在URI中被请求。

这可能吗?我在我的配置中尝试了类似的东西来拒绝.php请求,但由于技术上有重写,它只会拒绝所有请求。它目前不在那里,因为它不起作用。

当前配置:

location / {
try_files $uri $uri/ @extensionless-php;
index index.php;
}

location @extensionless-php {
rewrite ^(.*)$ $1.php last;
}

location ~ /includes/(.+)\.php$ {
deny all;
}

location ~ \.php {
try_files $uri =404;
fastcgi_pass backend;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}

1 个答案:

答案 0 :(得分:0)

这似乎是somewhat of a duplicate of your later question,但是,如果您仍然想要解决此问题,以下代码应该执行您想要的操作,而不会实际拒绝所有请求。

if ($request_uri ~ "^[^?]*?(/index(?:\.php)?|\.php)(?:\?.*)?$") {   return  403;    }

使用pcrewhich is the library that nginx uses)进行一些调试。

$ pcretest
PCRE version 8.30 2012-02-04

  re> #^[^?]*?(/index(?:\.php)?|\.php)(?:\?.*)?$#
data> /test
No match
data> /test.php
 0: /test.php
 1: .php
data> /index.php
 0: /index.php
 1: /index.php
data> /iindex.php
 0: /iindex.php
 1: .php
data>