gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 13:04:45 25 4
gpt4 key购买 nike

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

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

基本上,我想要任何目录中的任何“/index”或“/index.php”,或对 403 或 404 的 .php 请求,并且只接受友好的无扩展名请求或目录根/来加载 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;
}

最佳答案

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

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

使用 pcre 进行一些调试(which 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>

关于linux - nginx 友好的 URI,对不友好的请求拒绝访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33003603/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com