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 快速生成 Flash 动画的方法
Mar 06 PHP
swfupload 多文件上传实现代码
Aug 27 PHP
初次接触php抽象工厂模式(Elgg)
Mar 21 PHP
php下使用curl模拟用户登陆的代码
Sep 10 PHP
drupal 代码实现URL重写
May 04 PHP
解析:通过php socket并借助telnet实现简单的聊天程序
Jun 18 PHP
使用淘宝IP库获取用户ip地理位置
Oct 27 PHP
php中filter_input函数用法分析
Nov 15 PHP
Thinkphp搭建包括JS多语言的多语言项目实现方法
Nov 24 PHP
php结合正则获取字符串中数字
Jun 19 PHP
php实现微信企业付款到个人零钱功能
Oct 09 PHP
laravel 实现关闭CSRF(全部关闭、部分关闭)
Oct 21 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
PHP如何利用P3P实现跨域
2013/08/24 PHP
使用pthreads实现真正的PHP多线程(需PHP5.3以上版本)
2014/05/05 PHP
laravel通用化的CURD的实现
2019/12/13 PHP
jquery插件 autoComboBox 下拉框
2010/12/22 Javascript
50款非常棒的 jQuery 插件分享
2012/03/29 Javascript
JavaScript基础语法让人疑惑的地方小结
2012/05/23 Javascript
解决node-webkit 不支持html5播放mp4视频的方法
2015/03/11 Javascript
Javascript如何判断数据类型和数组类型
2016/06/22 Javascript
jquery选择器中的空格与大于号>、加号+与波浪号~的区别介绍
2016/06/24 Javascript
微信小程序 跳转方式总结
2017/04/20 Javascript
angular项目中bootstrap-datetimepicker时间插件的使用示例
2018/03/15 Javascript
jQuery 实现倒计时天,时,分,秒功能
2018/07/31 jQuery
解决vue-cli脚手架打包后vendor文件过大的问题
2018/09/27 Javascript
file-loader打包图片文件时路径错误输出为[object-module]的解决方法
2020/01/03 Javascript
vue如何在用户要关闭当前网页时弹出提示的实现
2020/05/31 Javascript
微信小程序自定义顶部组件customHeader的示例代码
2020/06/03 Javascript
vue 里面的 $forceUpdate() 强制实例重新渲染操作
2020/09/21 Javascript
Python pass详细介绍及实例代码
2016/11/24 Python
Python模拟用户登录验证
2017/09/11 Python
Scrapy的简单使用教程
2017/10/24 Python
详细整理python 字符串(str)与列表(list)以及数组(array)之间的转换方法
2019/08/30 Python
通过实例解析python描述符原理作用
2020/01/22 Python
Python模拟FTP文件服务器的操作方法
2020/02/18 Python
Python 实现黑客帝国中的字符雨的示例代码
2020/02/20 Python
python模拟哔哩哔哩滑块登入验证的实现
2020/04/24 Python
基于python实现检索标记敏感词并输出
2020/05/07 Python
英国领先的男士美容护发用品公司:Mankind
2016/08/31 全球购物
Smashbox官网:美国知名彩妆品牌
2017/01/05 全球购物
Vertbaudet西班牙网上商店:婴儿服装、童装、母婴用品和儿童家具
2019/10/16 全球购物
生物化工专业个人自荐信
2013/09/26 职场文书
先进工作者获奖感言
2014/02/08 职场文书
初一学生期末评语
2014/04/24 职场文书
师德先进个人事迹材料
2014/12/19 职场文书
2015年党建工作总结
2015/03/30 职场文书
2015大一新生军训感言
2015/08/01 职场文书
SpringBoot使用ip2region获取地理位置信息的方法
2022/06/21 Java/Android