我的BLOG由于被搜索引擎收录了很多页面,以前从ASP的LBS迁移过PHP的WP后的一段时间内,导致站内出现了大量的404错误。feed的地址也变了,以前是/weblog/feed.asp和/weblog/feedrss2.asp,现在是/weblog/?feed=rss2了。后来我想把现在的Feed https://www.zuola.com/weblog/?feed=rss2 存为原来的feed.asp来继续供给原来的rss订阅用户,Sunu写了一个插件给我,用来实现自动在服务器上把feed另存为feed.asp,可惜的是,dreamhost的服务器不支持fopen()读取http的文件。结果用不上Sunu辛辛苦苦写的插件。在换服务器后的半年时间里,我一直都是手工把feed另存为feed.asp和feedrss2.asp,然后用FTP上传到服务器。这样做,麻烦是麻烦了点,但这样做就不用通知我那一百多个订阅用户更改订阅地址了。
昨天晚上,我发现了一个非常简便的方法:用apache的rewrite_module 实现重写feed.asp,就是把以下代码存为.htaccess,上传到/weblog/目录中就可以了,我再也不用下载feed另存为feed.asp再上传到weblog目录下了,现在访问https://www.zuola.com/weblog/feed.asp 就可以得到我的最新日志了,我再也不用每次写完日志后再把feed另存后上传了!
RewriteEngine On
RewriteBase /weblog/# Rewrite www.domain.com to domain.com
RewriteCond %{HTTP_https://www.zuola.com/weblog} ^www\.(.*)
RewriteRule ^(.*) http://%1/$1 [R,L]###
#### article and feed
###
#RewriteRule ^article\.asp\?id=(.*) /weblog/?p=$1 [L]
#RewriteRule ^default\.asp\?id=(.*) /weblog/?p=$1 [L]
#RewriteRule ^feed\.asp\?cat=(.*) /weblog/?feed=rss2&cat=$1 [L]
#RewriteRule ^feedrss2\.asp(.*) /weblog/?feed=rss2&$1 [L]
#RewriteRule ^feed\.asp\?q=comment&cat=(.*) /weblog/?feed=rss2&p=$1 [L]RewriteRule ^article.asp /weblog/ [L]
RewriteRule ^default.asp /weblog/ [L]
RewriteRule ^feed.asp /weblog/?feed=rss2 [L]
RewriteRule ^feedrss2.asp /weblog/?feed=rss2 [L]
但是,美中不足的是,我不知道如何在RewriteRule中传递参数,我希望别人访问https://www.zuola.com/weblog/?p=1 是得到https://www.zuola.com/weblog/?p=1 的效果,这个参数如何传递过去呢?我Google了三个多钟头,还是没有发现类似的解决办法,倒是说如何把动态页面通过rewrite来实现静态页面来讨好搜索引擎的办法介绍了很多。我怎么模仿都没弄成,谁会正则表达式,指点我一下吧。谢谢了。
你急了吧……
哈哈,
我来了。
RewriteBase /weblog
RewriteRule ^article\.asp\?id=(\d+) p=$1
你写得不是已经很好了嘛?
rewrite不管什么动态静态页面,只管浏览的重定向
我也遇到了类似问题,请问如何做呢?
我是BoBlog to F2blog转换的
我的目的是这样转换
http://www.81mil.cn/blog/read.php?1 到
http://www.81mil.cn/blog/index.php?load=read&id=1
参照楼上的改为:
RewriteRule ^read\.php\?(\d+)$ index.php?load=read&id=$1
一直是404错误,请问正确的写法是什么呢?楼主解决了吗?
我的也没有搞定。
我希望别人访问http://www.zuola.com/weblog/article.asp?id=1 是得到http://www.zuola.com/weblog/?p=1 的效果
还没解决啊?rewrite是用类似正则表达式的方式来替换的,上面那个1就是会“变”的量,那么
RewriteBase /weblog
RewriteRule ^article\.asp\?id=(\d+) p=$1
应该就能够解决问题
上面那个Rule中,^代表开始,\.中\是转义字符,让.代表.这个字符,而不是它在正则表达式语法中的含义,同理还有?
()定义了一个匹配,括号中被匹配的内容可以在后式中用$1来引用
\d+表示数字,至少一个以上的数字
我觉得这样写规则应该没什么问题
查查其他方面的设置
比如
RewriteEngine on
打开了没有
也可以
RewriteLog /home/fwolf/rewrite.log
RewriteLogLevel 2
看一下规则应用的过程,分析一下错误在哪里
对了
RewriteRule ^article\.asp\?id=(\d+) p=$1
应该改成
RewriteRule ^article\.asp\?id=(\d+) ?p=$1
更合理吧,这样rewrite后的url就类似
http://domain.com/?p=$1
然后就可以在index.php中进行处理了
如果你知道怎么用正则表达式传递中文参数(不用编码的方式,直接中文)也请告诉我,谢谢
qweqweqweqweqwe
”
‘response.write request(“type”)&””
‘response.write request(“typeid”)&””
response.write request(“load”)
%>
RewriteRule /(\d+)\.asp\?(\d+) /news1\.asp\?load=$1&id=$2
“qweqweqweqweqwe”
response.write request(“id”)&””
response.write request(“load”)
“RewriteRule /(\d+)\.asp\?(\d+) /news1\.asp\?load=$1&id=$2”
这个问题解决没?