5.伪静态(2) --- rewrite 机制

在实际开发中,我们实现伪静态,用的更多的还是rewrite 机制,但是他任然是以正则技术为基础的.

步骤开始:
(1) 启用rewrite模块,在默认情况下,没有启用
修改httpd.conf文件
#启动rewrite模块
LoadModule rewrite_module modules/mod_rewrite.so

确认是否启动成功
<?php phpinfo();?>
(2) 配置我们的虚拟主机
httpd.conf 打开虚拟主机的配置文件

# Virtual hosts
Include conf/extra/httpd-vhosts.conf

修改 httpd-vhost.conf
<VirtualHost *:80>
    DocumentRoot "C:/myenv/apache/htdocs/static2"
    #Directory配置节点,用于指定该目录下的文件或是图片.的访问权限
    #设置虚拟主机的错误页面,欢迎页面 
    <Directory "C:/myenv/apache/htdocs/static2">
    </Directory>
</VirtualHost>
(3) 在hosts文件中,配置ip和主机的对应关系
127.0.0.1 www.hsp.com
(4) 这时我们访问 http//www.hsp.com/news.php

我们可以访问到该页面.

☞ 一个重要的知识点:
在apache服务器中,如果某个文件夹,没有指定访问权限,则以上级目录的权限为准,如果他自己指定了访问权限,则以自己的为准.


请注意,在配置访问权限的时候,顺序很重要:
#Order allow,deny 表示先看allow ,在看deny,留下的就是可以访问
    Order deny,allow
    Deny from all
    allow from 127.0.0.1

(5) 关于<Directory> 节点配置必须掌握
比较完整的配置文件
第一种配置方式
<VirtualHost *:80>
    DocumentRoot "C:/myenv/apache/htdocs/static2"
    #Directory配置节点,用于指定该目录下的文件或是图片.的访问权限
    #设置虚拟主机的错误页面,欢迎页面 
    ServerName www.hsp.com
    <Directory "C:/myenv/apache/htdocs/static2">
    #这里可以指定是否让人访问
    #Allow from all
    #是否列出文件目录结构
    # 如果希望列出 indexes 不希望 none
    #Options indexes
    #如何配置网站的首页面
    DirectoryIndex abc.html abc2.html
    #如何配置404错误页面,引导用户引入新页面
    errorDocument 404 /404.html
    #配置我们的rewrite规则
    RewriteEngine On
    #rewrite的规则 如果 aaa.html 就跳转到news.php 
    #$1 表示反向引用,第一个子表达式的内容
    #说明如果在正则规范中直接引用子表达式的内容,则使用\n
    #如果是在后面因为,则使用$n
    RewriteRule news-([a-zA-Z]+)-id(\d+)\.html$  news.php?type=$1&id=$2
    </Directory>
</VirtualHost>

特别说明: 容易犯的错误,一定要记住启用rewrite模块.


思考: 上面我们配置都要去修改 httpd-vhost.文件,但管理员不给你这个权限,怎么办?
思路: 可以把配置,写到 .htaccess文件.

第二种配置方式: 即把一部分配置放在 http-vhost.conf 文件, 把rewrite 规则放在 .htaccess
<VirtualHost *:80>
    DocumentRoot "C:/myenv/apache/htdocs/static2"
    #Directory配置节点,用于指定该目录下的文件或是图片.的访问权限
    #设置虚拟主机的错误页面,欢迎页面 
    ServerName www.hsp.com
    <Directory "C:/myenv/apache/htdocs/static2">
    #这里可以指定是否让人访问
    #Allow from all
    #是否列出文件目录结构
    # 如果希望列出 indexes 不希望 none
    #Options indexes
    #如何配置网站的首页面
    DirectoryIndex abc.html abc2.html
    #如何配置404错误页面,引导用户引入新页面
    errorDocument 404 /404.html
    #如果你配置了allowoverride all 这表示到对应的目录的.htaccess去匹配规则
    allowoverride all
    </Directory>
</VirtualHost>

在对应的文件下 .htaccess文件
<IfModule rewrite_module>
#如果rewrite 模块启用
#配置我们的rewrite规则
RewriteEngine On
#rewrite的规则 如果 aaa.html 就跳转到news.php 
#$1 表示反向引用,第一个子表达式的内容
#说明如果在正则规范中直接引用子表达式的内容,则使用\n
#如果是在后面因为,则使用$n
RewriteRule news-([a-zA-Z]+)-id(\d+)\.html$  news.php?type=$1&id=$2
#RewriteRule aaa.html news.php
</IfModule>

请注意: 项目中的 .htaccess文件的配置也是继承管理

第三种配置方法:
http-vhost.conf
<VirtualHost *:80>
    DocumentRoot "C:/myenv/apache/htdocs/static2"
    #Directory配置节点,用于指定该目录下的文件或是图片.的访问权限
    #设置虚拟主机的错误页面,欢迎页面 
    ServerName www.hsp.com
    <Directory "C:/myenv/apache/htdocs/static2">
    #如果你配置了allowoverride all 这表示到对应的目录的.htaccess去匹配规则
    allowoverride all
    </Directory>
</VirtualHost>

.htacces文件 

#这里可以指定是否让人访问
    #Allow from all
    #是否列出文件目录结构
    # 如果希望列出 indexes 不希望 none
    #Options indexes
    #如何配置网站的首页面
    DirectoryIndex abc.html abc2.html
    #如何配置404错误页面,引导用户引入新页面
    errorDocument 404 /404.html
<IfModule rewrite_module>
#如果rewrite 模块启用
#配置我们的rewrite规则
RewriteEngine On
#rewrite的规则 如果 aaa.html 就跳转到news.php 
#$1 表示反向引用,第一个子表达式的内容
#说明如果在正则规范中直接引用子表达式的内容,则使用\n
#如果是在后面因为,则使用$n
RewriteRule news-([a-zA-Z]+)-id(\d+)\.html$  news.php?type=$1&id=$2
#RewriteRule aaa.html news.php
</IfModule>

你可能感兴趣的:(正则,虚拟主机)