apache内嵌php实现url重定向及文件下载

apache内嵌php实现url重定向及文件下载

apache中嵌入php实现url重定向及文件下载功能



首先要在本地安装php

在html文件中,用包含起php部分内容

为了apache服务器能解析php文件,在apache的配置文件中配置如下:
/etc/httpd/conf/httpd.conf:
LoadModule php5_module modules/libphp5.so
AddType application/x-httpd-php .html

首先,是自定义404 notfound错误返回页面
在apache的配置文件中,找到ErrorDocument行,这些行就是处理apache错误的行,对应于404错误,我们可以自定义一个文件notfound.html来做404错误的返回页,那么就可以配置如下:
ErrorDocument 404 /notfound.html
这里有几点注意的地方,首先,对于apache,自定义的文件必须是html文件,其次,该文件大小必须大于512字节,不然无法返回该文件,再次,该文件必须是相对于apache共享目录的根目录,比如,apache的共享目录是/home/ftp/,该notfound.html文件的路径为/home/ftp/notfound.html,那么该处的配置就是/notfound.html

这样,就将404状态的url请求就会返回自定义的页面notfound.html



其次实现url重定向:

这里会用到php的全局环境变量,$_SERVER,用来获取url的信息,包括重定向前的url,和重定向后的url:

这里举个例子来说明实现方法,比如访问apache上不存在的一个页面
http://220.231.194.109/apache.html
其实,该完整的路径应该是:
http://220.231.194.109:80/home/ftp/apache.html
所以需要的$_SERVER的如下项:
$_SERVER['SERVER_PORT']=80
$_SERVER['DOCUMENT_ROOT']=/home/ftp
$_SERVER['REDIRECT_URL']=/apache.html
$_SERVER['REDIRECT_QUERY_STRING']变量是?后面的内容
$_SERVER['REQUEST_URI']是redirect_url和redirect_query_string的联合

就我们项目,apache的共享目录都是一样的,比如重定向到220.231.194.111上:
header("Location: $new_url");
这里的new_url就是http://220.231.194.111:80/home/ftp/apache.html
因为apache共享目录一致,所以可以省略/home/ftp
$new_url='http://'.$redirect_ip.':'.$_SERVER['SERVER_PORT'].$_SERVER['REQUEST_URI'];

这样就实现了url重定向


最后来实现文件下载,即将没有访问到的资源下载到本地:

用rsync,使用远程ssh来实现
$download_cmd="/usr/sbin/rsync -avz 220.231.194.111:80/home/ftp/apache.html /home/ftp/";
system("sudo $download_cmd");

$download_cmd的合成很简单,就是上面那几个$_SERVER变量的联合

首先,要system函数可以被调用,需要配置php
/etc/php.ini:
safe_mode = Off
重启httpd

下面要配置该命令的执行成功,基于安全性考虑,apache的用户不能为root,但是rsync的执行又需要有root权限才行,这就需要给apache所属用户apache配置root权限:
/etc/sudoers:
apache ALL=(ALL) NOPASSWD:ALL

这样,用户apache就能拥有root的权限来执行rsync了


然后呢,就是rsync远程ssh下载会提

apache内嵌php实现url重定向及文件下载的相关文档搜索

相关文档