要求:

假如我请求一个地址:www.lxy.com/news-sport-id123.html

转成:www.lxy.com/show.php?cate=news&class=sport&id=123


步骤:

首先我们需要在apache中启用rewrite模块

打开apachehttpd.conf文件,找到#LoadModule rewrite_module modules/mod_rewrite.so,将前面的‘#’去掉。

创建虚拟目录

<VirtualHost *:80>

   #网站域名

  ServerName www.lxy.com  

   #网站根目录

  DocumentRoot "E:/web/lxy/"


   #设置网站目录的权限

  <Directory "E:/web/lxy/">


   #设置顺序,如下规则的意思是首先允许所有访问但是拒绝1.1.1.1这个ip访问这个刚开始把我弄晕了

  Order allow,deny

Allowfrom All

  Deny from 1.1.1.1


  #options选项设置网站是否可以列出文件列表,网站正式上线后除了有特殊需求否则都不允许列出文件列表,但是需要特别注意的是如果开启apacherewrite后,options的参数必须为+indexes

   #允许列出文件列表

  Options +Indexes

   #不允许列出文件列表的选项为 Options +Indexes


   #设置欢迎页面

DirectoryIndex  11.php


   #如果匹配不到,可以指定一个错误页

errorDocument404 /404.php



   #可以把Allowoverride这个启动,然后把重写规则放到 .htaccess,也可以直接放在虚拟主机中配置

  #Allowoverride All

  RewriteEngine On

   #重写规则

  #RewriteRule news-id(\d+)\.html$ show.php?id=$1

  RewriteRule ^([a-zA-Z]+)-([a-zA-Z]+)-id(\d+)\.html$show.php?cat=$1&class=$2&id=$3


  </Directory>

</VirtualHost>


.下面我写一个show.php的文件,内容主要为打印出接收到的参数即可

<?php

  Print_r($_SERVER);

?>


接下来我们来访问以下即可

wKiom1MxQFaRmw-CAAGbaKxwalM043.jpg




我们也可以把重新规则写入.htaccess文件中,将.htaccess文件放到网站根目录 或者 需要执行的PHP文件所在的文件夹下。然后将 Allowoverride All添加到虚拟目录的配置选择中去,在.htaccess文件中添加重写规则即可。

  1. #创建一个Rewrite Engine (URL重写工具)

  2. RewriteEngine On  

  3. #定重写规则: 主要使用正则表达式

  4. RewriteRule  ^([a-zA-Z]+)-([a-zA-Z]+)-id(\d+)\.html$ show.php?cat=$1&class=$2&id=$3

    效果跟将重写规则写在配置文件中是一样的。