【概述】URL重写就是首先获得一个进入的URL请求然后把它重新写成网站可以处理的另一个URL的过程。举个例子来说,如果通过浏览器进来的URL是index.php?type=news&&cata=sport&&id=123那么它可以被重写成 “news-sport-123.html”,这样的URL,这样的网址可以更好的被搜索引擎抓取。
【优点】URL重写可以降低使用动态网页时受sql注入攻击的几率,还可以在不静态化的网页的情况下,利于搜索引擎对网页的抓取(SEO)。
【配置】
1,启用httpd.conf配置文件中的rewrite静态库
#开启apache rewrite重写模块
LoadModule rewrite_module modules/mod_rewrite.so
2,配置测试虚拟主机
2.1,启用httpd.conf配置文件中的httpd-vhosts.conf选项
# Virtual hosts 开启此选项,使其包含httpd-vhosts.conf配置文件
Include conf/extra/httpd-vhosts.conf
2.2在httpd-vhosts.conf配置文件中添加一个虚拟主机
<VirtualHost *:80>
DocumentRoot "X:/phptest/urlrewrite_test" ServerName www.gazeon.com
#Directory这个段,主要用处指定,该目录的访问权限 <Directory "X:/phptest/urlrewrite_test"> #允许所有人访问 Allow from all #不列出该网站的文件列表 Options None #设置网站默认的首页面 http://www.gazeon.com DirectoryIndex index.php #配置统一的 404页面 errordocument 404 /error404.html #开启重写引擎 RewriteEngine On #配置url重写规则 ,使用正则匹配,$1,$2,$3表示第N个子表达式中匹配的结果 RewriteRule (w+)-(w+)-(d+).html$ index.php?type=$1&&cata=$2&&id=$3 </Directory> </VirtualHost>
2.2.1【注意】如果你的apache安装目录没有httpd-vhosts.conf文件,可以将以上配置内容直接写到httpd.conf配置文件中。
2.2.2【另外】你也可以在需要访问的文件目录下,直接通过写.htaccess文件来规范重写规则,比在httpd.conf文件中配置更灵活
#.htaccess文件内容
<IfModule rewrite_module>
#开启重写引擎 RewriteEngine On #配置url重写规则 ,使用正则匹配,$1,$2,$3表示第N个子表达式中匹配的结果 RewriteRule (w+)-(w+)-(d+).html$ index.php?type=$1&&cata=$2&&id=$3 </IfModule>
重启Apache。
3,在hosts文件中添加规则(可选)
打开C:WindowsSystem32driversetc 目录下的hosts文件,添加如下代码
127.0.0.1/urlrewrite_test www.gazeon.com
4,建立测试网也页
在X:phptesturlrewrite_test 下新建index.php
<?php /* 2016/3/10 YunGaZeon 此网页仅用于URL重写测试,因此尽量简单 */ echo '<pre>'; print_r($_GET); echo '</pre>';
4.1浏览器打开www.gazeon.com/news-sport-123.html 测试查看
显示以下内容,则配置成功
Array ( [type] => news [cata] => sport [id] => 123 )