php禁止网页抓取(想在重写规则里直接禁止php后缀的URL被访问)
优采云 发布时间: 2022-02-02 22:16php禁止网页抓取(想在重写规则里直接禁止php后缀的URL被访问)
我想在重写规则中直接禁止访问带有php后缀的URL。但是后来我发现重写规则是递归调用的。如果在重写规则中直接禁止php,那么重写到php文件的规则也会失效,所以有以下方法
一开始是想在rewrite rules里面直接禁止php后缀的url被访问。但后来发现重写规则是递归调用的。如果在重写规则中直接禁止php,那么重写到php文件的规则也会失效。重写引擎开启
复制代码代码如下:
重写规则^test$/test.php[L]
RewriteRule^test.php$$0[F,L]
递归调用很糟糕。当你第一次访问 /test 时,会检查一次 URL 重写,然后在匹配 ^test$ 时在内部重定向到 /test.php。但是内部重定向也会触发URL重写,所以再检查一下,Matching to ^test.php$是强制直接操作[F](Forbidden),所以变成403错误。在这种情况下,必须判断它是否已经被服务器重定向。这时候server变量里面有个REDIRECT_URL可以用,所以我试着用这个来判断。
复制代码代码如下:
重写引擎开启
重写规则^test$/test.php[L]
RewriteCond%{REDIRECT_URL}^$
RewriteRule.*$0[F,L] 对/test的写访问还是403,稍微查了一下,发现RewriteCond中的%{REDIRECT_URL}一直是空的,很蛋疼。在这种情况下,没有办法在重写规则中直接禁止它。php也是。但它可以以不那么花哨的方式完成。就是判断php文件中的REDIRECT_URL。这种方法虽然可以实现,但感觉很逊色,但到目前为止,我还没有找到更好的方法。
复制代码代码如下:
$_SERVER['REDIRECT_URL']ordie('Forbidden');
//这里只是显示文字,实际使用时需要输出的HTTP错误码。
echo$_SERVER['REDIRECT_URL'];//成功访问显示信息
修改这段 PHP 代码并扔到全局引用中,基本上是没有问题的。虽然不是完美的解决方案,但至少解决了,以后可能会找到更好的方法。
以上就是Apache下防止php文件被直接访问的解决方案的详细内容。更多详情请关注html中文网文章其他相关话题!