1、 rewrite
1.1、 Rewrite规则简介:
Rewirte主要的功能就是实现URL的跳转,它的正则表达式是基于Perl语言。可基于服务器级的(httpd.conf)和目录级的 (.htaccess)两种方式。如果要想用到rewrite模块,必须先安装或加载rewrite模块。
安装Rewirte模块两种方式:
方法一:是编译apache的时候就直接 安装rewrite模块。
方法二:编译apache时以DSO模式安装apache,然后再利用源码和apxs来安装rewrite模块。
1.2、 基于服务器级的(httpd.conf)有两种方法:
方法1:在httpd.conf的全局下 直接利用RewriteEngine on来打开rewrite功能;
方法2:在局部里利用RewriteEngine on来打开rewrite功能,下面将会举例说明,需要注意的是,必须在每个virtualhost里用RewriteEngine on来打开rewrite功能。否则virtualhost里没有RewriteEngine on它里面的规则也不会生效。
基于目录级的(.htaccess),要注意一点那就是必须打开此目录的FollowSymLinks属性且在.htaccess里要声明RewriteEngine on。
1.3、 mod_rewrite模块检查及安装
1.3.1、 检查mod_expires模块是否安装:
[root@cong11 ~]# apachectl -M | grep rewrite
rewrite_module (static) #此种结果为编译安装时装的。 注:默认我的apache这里已经安装好了,不需要编译。
expires_module (shared) #此种结果为DSO方式安装的
1.3.2、 安装rewrite模块
a)编译方式安装
编译的时候跟上–enable-rewrite即可实现安装
b)DSO方式安装
先查看rewrite在哪里
[root@cong11 ~]# find / -name mod_rewrite.c
/root/lamp/httpd-2.4.38/modules/mappers/mod_rewrite.c
找着后在开始安装
[root@cong11 ~]# apxs -c -i -a /root/lamp/httpd-2.4.38/modules/mappers/mod_rewrite.c
[root@cong11 ~]# apachectl -M | grep rewrite
rewrite_module (shared)
1.4、 网站重定向
实现client请求的主机前缀不是www.qingniao.com和192.168.100.101都跳转到主机前缀为http:// www.qingniao.com。例如当用户在地址栏写入http:// qingniao.com.cn和bbs. qingniao.com直接跳转到http:// www.qingniao.com登录网站。
1.4.3、 修改配置文件
[root@cong11 ~]# vim /usr/local/httpd/conf/httpd.conf
User apache
Group apache
#在Group下加入以下内容
RewriteEngine on
RewriteCond %{HTTP_HOST} !^www.qingniao.com [NC]
RewriteCond %{HTTP_HOST} !^192.168.100.101 [NC]
RewriteCond %{HTTP_HOST} !^$
RewriteRule ^/(.*) http://www.qingniao.com/ [L]
1.4.4、 添加hosts记录文件
192.168.100.101 www.qingniao.com
192.168.100.101 bbs.qingniao.com
1.4.5、 修改clent端hosts
修改C:\Windows\System32\drivers\etc下hosts在最后添加
1.4.6、 重启httpd
[root@cong11 ~]# systemctl restart httpd
1.4.7、 测试
http://www.qingniao.com/
http://bbs.qingniao.com/
1.5、 配置防盗链
1.5.8、 开启rewrite模块
[root@cong11 ~]# vim /usr/local/httpd/conf/httpd.conf
LoadModule rewrite_module modules/mod_rewrite.so
1.5.9、 配置文件,将前边的重定向全部删除,添加下边的
[root@cong11 ~]# vim /usr/local/httpd/conf/httpd.conf
RewriteEngine on
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !qingniao.com/.$ [NC]
RewriteCond %{HTTP_REFERER} !qingniao.com/.$ [NC]
RewriteCond %{HTTP_REFERER} !www.qingniao.com/.$ [NC]
RewriteCond %{HTTP_REFERER} !www.qingniao.com/.$ [NC]
RewriteRule .*.(gif|jpg|swf)$ http://www.qingniao.com/about/test.jpg [R,NC,L]
1.5.10、 创建目录和文件
[root@cong11 ~]# mkdir /usr/local/apache/htdocs/about
[root@cong11 ~]# cp test.jpg /usr/local/apache/htdocs/about/
[root@cong11 ~]# cp timg.jpg /usr/local/apache/htdocs
1.5.11、 测试
在开启一台服务器 安装httpd
[root@localhost ~]# yum -y install httpd
[root@localhost ~]# vim /var/www/html/index.html
设置超链接:
[root@localhost ~]# vim /etc/hosts
修改本地hosts文件
192.168.100.101 www.qingniao.com
192.168.100.103 www.timg.com
~
5.4.客户端配置hosts文件‘
启服务:测试
完成
安装php
1.5.11.1、 方法一:
使用本地源安装依赖包,再下载安装本地仓库中不存在的软件包,进行安装。
安装依赖包
[root@cong11 ~]# yum -y install php-mcrypt libmcrypt libmcrypt-devel autoconf freetype gd libmcrypt libpng libpng-devel libjpeg libxml2 libxml2-devel zlib curl curl-devel re2c libmcrypt-devel freetype-devel libjpeg-devel bzip2-devel
安装libmcrypt
上传libmcrypt
[root@cong11 ~]# tar zxf libmcrypt-2.5.7.tar.gz
[root@cong11 ~]# cd libmcrypt-2.5.7/
[root@cong11 libmcrypt-2.5.7]# ./configure --prefix=/usr/local/libmcrypt && make && make install
1.5.12、 安装php依赖包
1.5.12.2、 方法二:(跳过)
在有网的情况下,安装epel-release源,RHEL光盘和CentOS源缺少很多软件包,建议使用扩展源进行安装依赖包.
安装网络源
[root@cong11 ~]# wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
安装epel源
[root@cong11 ~]# yum install -y epel-release
安装依赖包:
[root@cong11 ~]# yum -y install php-mcrypt libmcrypt libmcrypt-devel autoconf freetype gd libmcrypt libpng libpng-devel libjpeg libxml2 libxml2-devel zlib curl curl-devel re2c bzip2-devel libmcrypt-devel freetype-devel libjpeg-devel
我这里用的是第一种办法:
1.5.13、 上传php软件包并解压
[root@cong11 ~]# ls
anaconda-ks.cfg httpd-2.4.38.tar.gz libmcrypt-2.5.7.tar.gz
cronolog-1.6.2.tar.gz libmcrypt-2.5.7 php-5.6.36.tar.gz
[root@cong11 ~]# tar zxvf php-5.6.36.tar.gz -C /usr/local/src/
1.5.14、 预编译
[root@cong11 ~]# cd /usr/local/src/php-5.6.36/
[root@cong11 php-5.6.36]# ./configure --prefix=/usr/local/php5.6 --with-mysql=mysqlnd --with-pdo-mysql=mysqlnd --with-mysqli=mysqlnd --with-openssl --enable-fpm --enable-sockets --enable-sysvshm --enable-mbstring --with-freetype-dir --with-jpeg-dir --with-png-dir --with-zlib --with-libxml-dir=/usr --enable-xml --with-mhash --with-mcrypt=/usr/local/libmcrypt --with-config-file-path=/etc --with-config-file-scan-dir=/usr/local/php5.6/etc/ --with-bz2 --enable-maintainer-zts --with-apxs2=/usr/local/httpd/bin/apxs
注意: 文档上apxs 路径在 /usr/local/httpd/bin/apxs 而 我的apache安装在/usr/local./apache/bin/apxs 所以需要更改
1.5.15、 Php配置选项中文手册
http://php.net/manual/zh/configure.about.php
注:
相关选项的解释:
–prefix=/usr/local/php5.6 //安装位置
–with-mysql=mysqlnd //支持mysql
–with-pdo-mysql=mysqlnd //支持pdo模块
–with-mysqli=mysqlnd //支持mysqli模块
注:上面的三选项的作用:数据库与php不在一个服务器上,指定此种方式,安装数据库连接驱动
–with-apxs2 #将php编译为Apache的一个模块进行使用
–enable-mbstring #多字节字符串的支持
–with-curl #支持cURL
–with-gd #支持gd库
–enable-fpm #支持构建fpm
–with-config-file-path #设置配置文件路径
–with-openssl #支持openssl模块
–enable-fpm #支持fpm模式
–enable-sockets #启用socket支持
–enable-sysvshm #启用系统共享内存支持
–enable-mbstring #多字节字串、像我们的中文就是多字节字串
–with-freetype-dir #支持freetype、就要装freetype-devel、跟字体相关的、字体解析工具
–with-jpeg-dir
–with-png-dir
注:上面的二选项的作用:处理jpeg、png图片的、php可以动态生成jpeg图片
–with-zlib #是个压缩库、在互联网传输时用来压缩传输的
–with-libxml-dir=/usr #这个libxml是用来解析xml的、指定/usr下
–enable-xml #支持xml的
–with-mhash #支持mhash
–with-mcrypt=/usr/local/libmcrypt #libmcrypt-devel这个程序包所指定的
–with-config-file-path=/usr/local/php5.6/etc #指定配置文件的存放路径的
–with-config-file-scan-dir=/etc/php.d #配置文件扫描路径
–with-bz2 #支持BZip2
–enable-maintainer-zts
为了支持apache的worker或event这两个MPM,编译时使用了–enable-maintainer-zts选项
如果使用PHP5.3以上版本,为了链接MySQL数据库,可以指定mysqlnd,这样在本机就不需要先安装MySQL或MySQL开发包了。mysqlnd从php 5.3开始可用,可以编译时绑定到它(而不用和具体的MySQL客户端库绑定形成依赖),但从PHP 5.4开始它就是默认设置了。
1.5.16、 编译
[root@m101 php-5.6.36]# make -j 4
1.5.17、 安装
[root@m101 php-5.6.36]# make install
1.5.18、 生成配置文件
[root@m101 php-5.6.36]# cp php.ini-production /usr/local/php5.6/etc/php.ini
1.5.19、 添加Apache支持
[root@m101 ~]# vim /usr/local/httpd/conf/httpd.conf
265 DirectoryIndex index.php index.html #265添加index.php
#403行写入如下内容
403 AddType application/x-httpd-php .php .phtml
1.5.20、 创建测试页面(都要放在apache安装目录下)
[root@cong11 ~]# vim /usr/local/apache/htdocs/index.php #php测试页面
[root@cong11 ~]# vim /usr/local/apache/htdocs/test.php #测试mysql连接页面
<?php $link=mysql_connect('192.168.1.12','test','123456'); if ($link)echo "connection success......"; mysql_close(); ?>1.5.21、 创建mysql测试账号
恢复192.168.1.12为源码安装mysql快照,创建授权test账号
[root@m102 ~]# mysql -uroot -p123456
mysql> grant all on . to test@’%’ identified by ‘123456’;
mysql> flush privileges;
1.5.22、 重启httpd服务
[root@ m102 ~]# systemctl restart httpd
1.5.23、 测试