求助:rewrite_module 的RewriteRule中如何传递参数

我的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来实现静态页面来讨好搜索引擎的办法介绍了很多。我怎么模仿都没弄成,谁会正则表达式,指点我一下吧。谢谢了。

10 thoughts on “求助:rewrite_module 的RewriteRule中如何传递参数”

  1. 我希望别人访问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
    看一下规则应用的过程,分析一下错误在哪里

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据