Apache下禁止php文件被直接访问的解决方案
2015-01-24信息快讯网
想在重写规则里直接禁止php后缀的URL被访问。但后来发现重写规则是递归调用的,如果在重写规则里直接禁止php,那么重写到php文件的规则也会失效,于是有了下面的方法
一开始,我想在重写规则里直接禁止php后缀的URL被访问。但后来发现重写规则是递归调用的,如果在重写规则里直接禁止php,那么重写到php文件的规则也会失效。RewriteEngineOn
RewriteRule^test$/test.php[L] RewriteRule^test.php$$0[F,L]
递归调用这真可怕,一开始访问/test的时候URL重写检查一次,然后匹配到^test$就内部重定向到/test.php,然而内部重定向也会触发URL重写,因此再次检查,匹配到^test.php$,被强制直接[F](Forbidden)操作,所以就变成了403错误。既然这样,就必须判是否已经经过服务器重定向。这时候服务器变量里有个REDIRECT_URL可以使用,因此我试着用这个做判断。
RewriteEngineOn RewriteRule^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代码修改下丢进全局引用里就基本上没啥问题了,虽然不是完美解决,但是至少还是解决了,以后也许会发现更好的方法。
php jq jquery getJSON跨域提交数据完整版
PHP Session 变量的使用方法详解与实例代码
php中通过数组进行高效随机抽取指定条记录的算法
php文件夹与文件目录操作函数介绍
php读取本地文件常用函数(fopen与file_get_contents)
PHP 关于访问控制的和运算符优先级介绍
使用PHP实现蜘蛛访问日志统计
PHP文件去掉PHP注释空格的函数分析(PHP代码压缩)
浅析php面向对象public private protected 访问修饰符
解析php中如何直接执行SHELL
编写Smarty插件在模板中直接加载数据的详细介绍
AJAX的跨域访问-两种有效的解决方法介绍
基于PHP文件操作的详细诠释
解析zend studio中直接导入svn中的项目的方法步骤
深入解析yii权限分级式访问控制的实现(非RBAC法)
基于PHP文件操作的详解
php中防止SQL注入的最佳解决方法
PHP笔记之:日期函数的使用介绍
php笔记之:AOP的应用
php class中self,parent,this的区别以及实例介绍
PHP中::、->、self、$this几种操作符的区别介绍
php判断终端是手机还是电脑访问网站的思路及代码
关于Iframe如何跨域访问Cookie和Session的解决方法
PHP屏蔽蜘蛛访问代码及常用搜索引擎的HTTP_USER_AGENT
简单实现限定phpmyadmin访问ip的方法
php中设置index.php文件为只读的方法
php中选择什么接口(mysql、mysqli)访问mysql
浏览器预览PHP文件时顶部出现空白影响布局分析原因及解决办法
PHP去掉从word直接粘贴过来的没有用格式的函数
PHP中防止直接访问或查看或下载config.php文件的方法
php中配置文件操作 如config.php文件的读取修改等操作
php文件打包 下载之使用PHP自带的ZipArchive压缩文件并下载打包好的文件
php安全之直接用$获取值而不$_GET 字符转义
使用PHP实现密保卡功能实现代码<打包下载直接运行>