php伪静态配置

配置虚拟主机和伪静态

1.开启Apache的rewrite模块

LoadModule rewrite_module modules/mod_rewrite.so

2.开启虚拟主机功能

# Virtual hosts

Include conf/extra/httpd-vhosts.conf

3.修改conf/extra/httpd-vhosts.conf文件

<VirtualHost *:80>

  DocumentRoot "F:/wamp/www/Teacher" 指定访问目录

  ServerName www.baidu.com 指定允许访问的域名

  <Directory "F:/wamp/www/Teacher"> 对这个目录进行设置

   Deny from all 禁止任何人访问,不写可以访问,是因为如果此目录没做设置,会继承他的上级目录来权限;如果上级目录禁止访问,可以再此目录中写Allow from all则这个目录就可以访问,不会继承父目录的权限

  Options none 不允许服务器显示目录中的文件列表,允许就改成Options indexes

DirectoryIndex abc.html 123.html 配置目录指定首页面,默认是index,指定后先选择abc.html,如果没有再显示123.html

errorDocument 404 /404.html 指定发生错误后显示的页面,errorDocument后跟HTTP状态码,当遇到这种状态吗,就会执行后面指定的页面

allowoverride all 允许到对应目录的.htaccess文件中 读取规则

下面配置rewrite规则

RewriteEngine On 开启重新功能(一定要检测是否启用mod_rewrite.so模块)

  RewriteRule a.html b.php 当访问a.html页面时,其实是访问b.php

RewriteRule news/id/(\d+).html news.php?id=$1 为了广泛的使用,可以使用正则来匹配news/id/100.html这种都执向news.php,接收的参数就是前面匹配的数值

  </Directory>

</VirtualHost>

4.htaccess文件的写法

在没有权限修改httpd-vhosts.conf文件的情况系下,可以使用.htaccess文件来做目录权限,如果.htaccess用不了,就看看httpd-vhosts.conf文件是否开启了allowoverride all

<IfModule rewrite_module> #如果加载了rewrite_module模块

这些规则和 httpd-vhosts.conf文件中的规则写法一样

   RewriteEngine On

RewriteRule news/id/(\d+).html news.php?id=$1

可以写多条规则

</IfModule>

5.做防盗链

<IfModule rewrite_module>

  RewriteEngine on

  RewriteCond %{HTTP_REFERER} !^http://(www\.)?xuni.com(/)?.*$ [NC]

  RewriteRule .*\.(gif|jpg|jpeg|bmp|png)$ http://www.xuni.com/warning.xjpg [R,NC]

</IfModule>

6.在C:\Windows\System32\drivers\etc的host文件中添加域名指向到本地127.0.0.1 www.xuni.com

注意:在配置好后,打开localhost发现提示403错误,是因为开启了虚拟主机功能(第二步),在httpd-vhosts.conf文件中默认添加了几条规则,因为用的是Wamp环境,里面的DocumentRoot不是Wamp指定的根目录,导致localhost定位到的目录不对,这就是导致localhost不能访问403的原因,只要把默认的规则修改下

<VirtualHost *:80>

ServerAdmin webmaster@dummy-host2.example.com

DocumentRoot "f:/wamp/www" #访问的根目录

ServerName localhost #允许访问的域名

ErrorLog "logs/dummy-host2.example.com-error.log"

CustomLog "logs/dummy-host2.example.com-access.log" common

</VirtualHost>

然后在后面添加自己需要的规则