实验环境为apache2.2.22
win下
有一个文件 正常访问为player.php?id=1
现在想这样实现:
player/1.html
第一种方法
直接修改httpd.conf文件
LoadModule rewrite_module modules/mod_rewrite.so
RewriteEngine on
RewriteRule ^/player/(.*).html$ /player.php?id=$1
这样子就可以直接实现
但是目前看来
RewriteRule player/(.*).html$ /player.php?id=$1 这样也可以
第二种方法,先要让apache 支持.htaccess文件
修改httpd.conf
用文本编辑器打开后查找
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
改为
<Directory />
Options FollowSymLinks
AllowOverride All
</Directory>
就可以了
然后,建立.htaccess文件
一种是创建一个htaccess文件,然后进入cmd 执行命令 rename htaccess .htaccess
或者直接用编辑器 如notepad++ notepad在保存时直接保存为 .htaccess 即可 扩展名一定要为*.*才可以
RewriteEngine on
RewriteRule !\.{js|ico|gif|jpg|png|css}$ index.php
RewriteRule /player-(.*).html$ player.php?id=$1
第二行意思是不对静态文件进行专项判断
下面提供一些参考:
1.Apache Rewrite规则的书写
RewriteEngine on
RewriteRule ^/test([0-9]*).html$ /test.php?id=$1
RewriteRule ^/new([0-9]*)/$ /new.php?id=$1 [R]
RewriteEngine on
#当我们访问的地址不是以www.163.com开头的,那么执行下一条规则
RewriteCond %{HTTP_HOST} !^www.163.com [NC]
RewriteRule ^/(.*) http://www.163.com/ [L]
2.Apache Rewrite规则修正符
1) R 强制外部重定向
2) F 禁用URL,返回403HTTP状态码。
3) G 强制URL为GONE,返回410HTTP状态码。
4) P 强制使用代理转发。
5) L 表明当前规则是最后一条规则,停止分析以后规则的重写。
6) N 重新从第一条规则开始运行重写过程。
7) C 与下一条规则关联
如果规则匹配则正常处理,以下修正符无效
8) T=MIME-type(force MIME type) 强制MIME类型
9) NS 只用于不是内部子请求
10) NC 不区分大小写
11) QSA 追加请求字符串
12) NE 不在输出转义特殊字符 \%3d$1 等价于 =$1