php禁止网页抓取( 想在重写规则里直接禁止php的URL被访问?)
优采云 发布时间: 2021-12-12 20:06php禁止网页抓取(
想在重写规则里直接禁止php的URL被访问?)
Apache下禁止直接访问php文件的解决方法
更新时间:2013年4月25日09:25:59 作者:
我想直接禁止在重写规则中访问php后缀URL。但是后来发现rewrite规则是递归调用的。如果重写规则中直接禁止php,那么重写到php文件的规则也是无效的,所以有如下方法
一开始想在rewrite规则中直接禁止php后缀的URL被访问。但是后来发现重写规则是递归调用的。如果在重写规则中直接禁止php,那么重写到php文件的规则也会失效。重写引擎开启
复制代码代码如下:
RewriteRule^test$/test.php[L]
RewriteRule^test.php$$0[F,L]
<IMG border=1 alt=Apache下禁止php文件被直接访问的方法 src="http://yyspanle.com//img.jbzj.com/file_images/article/201304/2013042509214213.jpg" width=532 height=179>
递归调用真的很可怕。当你第一次访问 /test 时,会检查一次 URL 重写,如果匹配 ^test$,则在内部重定向到 /test.php。但是内部重定向也会触发URL重写,所以再检查一下。如果匹配^test.php$,就强制直接操作[F](Forbidden),所以变成403错误。在这种情况下,必须判断是否已经被服务器重定向。这时候server变量中有一个REDIRECT_URL可以使用,所以我试着用这个作为判断。
复制代码代码如下:
重写引擎开启
RewriteRule^test$/test.php[L]
RewriteCond%{REDIRECT_URL}^$
RewriteRule.*$0[F,L] 这个写访问/test还是403,稍微查了一下,发现RewriteCond里面的%{REDIRECT_URL}一直是空的,很痛。在这种情况下,没有办法直接禁止重写规则。php.ini 但它可以通过一种不太花哨的方式来实现。就是判断php文件中的REDIRECT_URL。这个方法虽然可以实现,但是感觉很不好,但是目前还没有找到更好的方法。
复制代码代码如下:
$_SERVER['REDIRECT_URL']ordie('Forbidden');
//这只是显示文本,实际使用中需要输出的HTTP错误码。
echo$_SERVER['REDIRECT_URL'];//访问显示信息成功
<IMG border=1 alt="" src="http://yyspanle.com//img.jbzj.com/file_images/article/201304/2013042509214214.jpg" width=405 height=331>
修改这段PHP代码,扔到全局引用中基本没问题。虽然不是完美的解决方案,但至少已经解决了,以后可能会找到更好的方法。