Apache下禁止php文件被直接访问的方法

  一开始,我想在重写规则里直接禁止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'];//成功访问显示信息

?>

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

  一开始,我想在重写规则里直接禁止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'];//成功访问显示信息

?>

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


相关内容

  • 教程--本地安全策略设置
  • 一般情况下是不需要执行什么程序的,所以推荐不要执行系统程序目录,可以指向一个目录, 然后把需要执行的程序拷贝过去,比如: safe_mode_exec_dir = D:/tmp/cmd 但是,我更推荐不要执行任何程序,那么就可以指向我们网页目录: safe_mode_exec_dir = D:/us ...

  • 各大公司的PHP面试题
  • update 表名 set Date = GETDATE() where UserName = (is_file($folder.isort() 12. 写5个不同的自己的函数,来截取一个全路径的文件的扩展名,允许封装php库中已有的函数. 13. 一群猴子排成一圈,按1,2,-,n依次编号.然后从 ...

  • 面试题目及答案
  • 1.PHP的意思? PHP是一个基于服务端来创建动态网站的脚本语言,您可以用PHP和HTML生成网站主页 2.谈谈对mvc的认识? 答:由模型(Model),视图(View),控制器(Controller)完成的应用程序 由模型发出要实现的功能到控制器,控制器接收组织功能传递给视图; 3.写出发贴数 ...

  • 入侵检测实验二
  • xx 大学实验报告 学院:计算机科学与信息学院 专业:信息安全班级:xx 8. Snort 安装包 9. Winpcap 安装包 1. 安装Apache_2.0.46: 实验 步骤(1)安装在默认文件夹C:\apache下: 第2页共18页 (2)打开配置文件C:\apache\apache2\co ...

  • 十大最流行开源软件 科技中国--欢迎光临全球最大的互联网博物馆
  • 十大最流行开源软件回目录 对于开源软件来说,相信每个人心中都会有自己的TOP10,尤其是那些开源软件拥护者眼中的TOP10,可能会与我们所列的TOP10有些不同.不过,这是经过全球很多开源社区高手共同讨论的结果-- 对于开源软件来说,相信每个人心中都会有自己的TOP10,尤其是那些开源软件拥护者眼中 ...

  • Web服务器安装与配置实验报告
  • Web服务器安装与配置 实验名称:Web服务器安装与配置 实验目的:1.IIS服务器的安装与配置 2.Apache的安装与配置 3.Tomcat的安装与配置 实验准备:信息服务(IIS)管理器.Apache安装文件.Tomcat安装文件.在实 验之前对IIS.Apache.Tomcat应该有个初步的 ...

  • 网站安全维护方案
  • 网站安全维护方案 #### 2011年11月 目 录 1. 前言 . ................................................................................................................... ...

  • 公司网站建设详细设计说明书
  • 文件编号: 北京圣约达公司网站 详细设计 北京圣约达电子技术有限责任公司 二零零六年十一月 1. 范围 1.1标识 北京圣约达公司 1.2系统概述 北京圣约达公司网站(以下简称公司网站)是为了满足公司发展的需要而设计,以互联网为主导.其它技术手段为铺助.主要由公司产品.企业文化.服务支持三大模块组成 ...

  • php经典面试题及答案
  • 基础题 1.表单中 get与post提交方法的区别? 答:get用户端将数据加到URL后,格式为"?字段1=输入数据1&字段2=输入数据2&...". 由于get提交参数后会在地址栏中显示出来,所以会产生严重的安全问题. get传输的数据量小,get传输的数据量小 ...