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下载会提

示手动输入远程机器的密码,为了能自动完成下载,而不需要手动输入密码,则这样实现:

在本地:
终端下,用如下命令行
#ssh-keygen -t rsa
一阵回车,会生成id_rsa和id_rsa.pub两个文件,id_rsa为私钥,id_rsa.pub为公钥
#scp id_rsa.pub root@220.231.194.111:/root/.ssh/

在220.231.194.111上
#cat id_rsa.pub >> authorized_keys


最后是在数据库上做查询:

连接到远程mysql服务器:
$con = mysql_connect("$remost_ip", "$mysql_user", "$msyql_passwd");

选取数据库:
mysql_select_db("$database_name", $con);

查询命令:
$query="select * from 表名 where 列名 like '匹配的内容'";

返回查询结果:
$result = mysql_query("$query");

处理查询结果:
while($row=mysql_fetch_array($result))
{
echo $row['列名'];
}

关闭连接:
mysql_close($con);

redhat下是使用rpm包安装的php和mysql,如果没有安装完全,是会提示这些mysql的函数没有定义,此时需要安装php支持mysql的接口的rpm包,类似php-mysql....rpm包,然后再重新安装php就可以了


相关主题
相关文档
最新文档