简单的说,如下就是动态网址:
http://www.bing.com/docs/submit.aspx?FORM=WSDD2&mkt=zh-CN
可改为静态:
http://www.bing.com/docs/submit-xx
http://www.bing.com/docs/submit-xx/
http://www.bing.com/docs/submit-xx.php
这个网站服务器是支持动态网址到静态网址的转换,就是支持rewrite mode, 或者是支持.htaccess文件。把下面的文件保存到.htaccess文件,我是用记事本完成的。然后登录服务器,把它上传到根目录下。在IE地址栏输入www.coolder.com/travel-253,网页自动转到
www.coolder.com/layer_detail.php?uid=253.
RewriteEngine on
RewriteBase /
RewriteRule ^travel-253$ /layer_detail.php?uid=253 [NC]
我想在我自己的笔记本上的Apache上试动态网址到静态网址的转换,费了一些周折,现在,终于弄清这个Apache是支持rewrite的,而且下了个简单的试了一下,成功了。先小结一下,然后再学习复杂些的规则,最后把这个网站的动态网址转换成静态的。
步骤如下:
1,版本查看命令
D:\xampp\apache\bin>apache -v
Server version: Apache/2.2.11 (Win32)
Server built: Dec 10 2008 00:10:06
是2.2。x版,应该已经有rewrite模块。
2,打开D:\xampp\apache\conf目录下的httpd.conf文件,搜索下面的文字:
LoadModule rewrite_module modules/mod_rewrite.so
如果前面有#号,将#去掉,使它生效。
3,搜:AllowOverride none,将其改为AllowOverride All。文件里面有三个,不知道是不是需要都改,但,我把AllowOverride none都改为AllowOverride All了。
然后,在文件末尾加上下面的文字:
RewriteEngine On
RewriteLog logs/rewrite.log
RewriteLogLevel 9
RewriteRule ^/travel$ /mia/index.php [R,NC]
4,重启Apache:
D:\xampp\apache\bin>apache -k stop
D:\xampp\apache\bin>apache -k start
我可是用的 apache -k restart, 可是一直没变化,后来发现我登录的用户没有管理员权限,无法stop Apache,可是,用restart好像成功了似的,也不报错。我用管理员用户登录,先用stop停止,再用start启动,然后在IE输入localhost/travel地址,打回车,网页自动转接到localhost/mia/index.php。
如果不成功,可以到logs目录查看rewrite.log, 至少它能给你信心你的服务器支持rewrite,使你没写好。
我开始就怀疑我的Apache根本不支持rewrite,看看log文件,信心大增,终于试成功了个简单的。
接着试,待续。
从这个连接(http://www.phpv.net/html/1626.html 摘抄一段,如下:
RewriteRule规则表达式的说明:
. 匹配任何单字符
[chars] 匹配字符串:chars
[^chars] 不匹配字符串:chars
text1|text2 可选择的字符串:text1或text2
? 匹配0到1个字符
* 匹配0到多个字符
+ 匹配1到多个字符
^ 字符串开始标志
$ 字符串结束标志
\n 转义符标志
反向引用 $N 用于 RewriteRule 中匹配的变量调用(0 <= N <= 9)
反向引用 %N 用于 RewriteCond 中最后一个匹配的变量调用(1 <= N <= 9)
RewriteRule适用的标志符
‘redirect|R [=code]’ (force redirect)强迫重写为基于http开头的外部转向(注意URL的变化) 如:[R=301,L]
‘forbidden|F’ (force URL to be forbidden)重写为禁止访问
‘proxy|P’ (force proxy)重写为通过代理访问的http路径
‘last|L’ (last rule)最后的重写规则标志,如果匹配,不再执行以后的规则
‘next|N’ (next round)循环同一个规则,直到不能满足匹配
‘chain|C’ (chained with next rule)如果匹配该规则,则继续下面的有Chain标志的规则。
‘type|T=MIME-type’ (force MIME type)指定MIME类型
‘nosubreq|NS’ (used only if no internal sub-request)如果是内部子请求则跳过
‘nocase|NC’ (no case)忽略大小
‘qsappend|QSA’ (query string append)附加查询字符串
‘noescape|NE’ (no URI escaping of output)禁止URL中的字符自动转义成%[0-9]+的形式。
‘passthrough|PT’ (pass through to next handler)将重写结果运用于mod_alias
’skip|S=num’ (skip next rule(s))跳过下面几个规则
‘env|E=VAR:VAL’ (set environment variable)添加环境变量
例子:
用在主机上的:
RewriteEngine On
RewriteLog logs/rewrite.log
RewriteLogLevel 9
RewriteRule ^/mia/to-canada$ /mia/layer.php?division=1&page=1 [NC,QSA,L]
RewriteRule ^/mia/to-canada-(.+)$ /mia/layer.php?division=1&page=$1 [NC,QSA,L]
RewriteRule ^/mia/(.+)-(.+)-(.+)$ /mia/layer_detail.php?tid=$1&page_no=$2&page=$3 [NC,QSA,L]
注:开始时换页不能用,老是第一页,后来加上QSA--附加上查询字符串,才好。
用在虚拟主机上的:
Options +FollowSymlinks
RewriteEngine on
RewriteBase /
RewriteRule ^to-canada$ layer.php?division=1&page=1 [NC,QSA,L]
RewriteRule ^to-canada-(.+)$ layer.php?division=1&page=$1 [NC,QSA,L]
RewriteRule ^(.+)-(.+)-(.+)$ layer_detail.php?tid=$1&page_no=$2&page=$3 [NC,QSA,L]
一点教训:
应用这个url重写功能后,程序里面有些连接地址要写绝对地址,否则,它就是你输入的地址+相对地址,结果是找不到文件。require_once("")里用相对地址,不需要改。
推荐两个连接:
URL重写指南
http://www.7880.com/Manual/ApacheManual_GB/misc/rewriteguide.html
Apache模块 core
http://www.7880.com/Manual/ApacheManual_GB/mod/core.html#