Apache下禁止php文件被直接访问的解决方案


Posted in PHP onApril 25, 2013

一开始,我想在重写规则里直接禁止php后缀的URL被访问。但后来发现重写规则是递归调用的,如果在重写规则里直接禁止php,那么重写到php文件的规则也会失效。RewriteEngineOn

RewriteRule^test$/test.php[L] 

RewriteRule^test.php$$0[F,L]
Apache下禁止php文件被直接访问的解决方案

递归调用这真可怕,一开始访问/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'];//成功访问显示信息 

?>
Apache下禁止php文件被直接访问的解决方案

把这段PHP代码修改下丢进全局引用里就基本上没啥问题了,虽然不是完美解决,但是至少还是解决了,以后也许会发现更好的方法。

PHP 相关文章推荐
PHP 中dirname(_file_)讲解
Mar 18 PHP
PHP开发规范手册之PHP代码规范详解
Jan 13 PHP
通过php快速统计某个数据库中每张表的数据量
Sep 04 PHP
获取php页面执行时间,数据库读写次数,函数调用次数等(THINKphp)
Jun 03 PHP
PHP执行Curl时报错提示CURL ERROR: Recv failure: Connection reset by peer的解决方法
Jun 26 PHP
PHP制作图形验证码代码分享
Oct 23 PHP
thinkphp数据查询和遍历数组实例
Nov 28 PHP
php类的扩展和继承用法实例
Jun 20 PHP
php实现上传图片文件代码
Jul 19 PHP
JSON用法之将PHP数组转JS数组,JS如何接收PHP数组
Oct 08 PHP
TP(thinkPHP)框架多层控制器和多级控制器的使用示例
Jun 13 PHP
PHP预定义超全局数组变量小结
Aug 20 PHP
PHP笔记之:日期函数的使用介绍
Apr 24 #PHP
php笔记之:AOP的应用
Apr 24 #PHP
php class中self,parent,this的区别以及实例介绍
Apr 24 #PHP
PHP中::、->、self、$this几种操作符的区别介绍
Apr 24 #PHP
php判断终端是手机还是电脑访问网站的思路及代码
Apr 24 #PHP
用PHP提取中英文词语以及数字的首字母的方法介绍
Apr 23 #PHP
基于PHP读取TXT文件向数据库导入海量数据的方法
Apr 23 #PHP
You might like
预告映像公开!第1章续篇剧场版动画《Princess Principal Crown Handler》4月10日上映!
2020/03/06 日漫
phpwind放自动注册方法
2006/12/02 Javascript
在JavaScript中获取请求的URL参数
2010/12/22 Javascript
jquery实现奇偶行赋值不同css值
2012/02/17 Javascript
浅谈Javascript事件模拟
2012/06/27 Javascript
什么是json和jsonp,jQuery json实例详详细说明
2012/12/11 Javascript
一个简单的Node.js异步操作管理器分享
2014/04/29 Javascript
jQuery 中$(this).index与$.each的使用指南
2014/11/20 Javascript
js获取客户端操作系统类型的方法【测试可用】
2016/05/27 Javascript
Jquery实时监听input value的实例
2017/01/26 Javascript
全面解析jQuery中的$(window)与$(document)的用法区别
2017/08/15 jQuery
a标签调用js的方法总结
2019/09/05 Javascript
vue实现多个echarts根据屏幕大小变化而变化实例
2020/07/19 Javascript
手机浏览器唤起微信分享(JS)
2020/10/11 Javascript
[42:27]DOTA2上海特级锦标赛主赛事日 - 3 败者组第三轮#2Fnatic VS OG第三局
2016/03/05 DOTA
Linux下将Python的Django项目部署到Apache服务器
2015/12/24 Python
Flask框架使用DBUtils模块连接数据库操作示例
2018/07/20 Python
Python爬虫PyQuery库基本用法入门教程
2018/08/04 Python
python的中异常处理机制
2018/08/30 Python
使用python切片实现二维数组复制示例
2019/11/26 Python
对Tensorflow中Device实例的生成和管理详解
2020/02/04 Python
解决python3插入mysql时内容带有引号的问题
2020/03/02 Python
解决virtualenv -p python3 venv报错的问题
2021/02/05 Python
HTML5语音识别标签写法附图
2013/11/18 HTML / CSS
IE9对HTML5中部分属性不支持的原因分析
2014/10/15 HTML / CSS
详解HTML5中表单验证的8种方法介绍
2016/12/19 HTML / CSS
Cotton On美国网站:澳洲时装连锁品牌
2016/10/25 全球购物
英国知名的皮手套品牌:Dents
2016/11/13 全球购物
法国最大电子商务平台:Cdiscount
2018/03/13 全球购物
观看信仰心得体会
2014/09/04 职场文书
关于运动会广播稿200字
2014/10/08 职场文书
离职感谢信
2015/01/21 职场文书
大队委员竞选演讲稿
2015/11/20 职场文书
八年级作文之友谊
2019/12/02 职场文书
关于CentOS 8 搭建MongoDB4.4分片集群的问题
2021/10/24 MongoDB
PostgreSQL13基于流复制搭建后备服务器的方法
2022/01/18 PostgreSQL