替换重写规则中的字符

时间:2011-12-18 22:54:32

标签: mod-rewrite

以下是我目前的规则:

RewriteCond %{QUERY_STRING} ^to=(one|seventeen|thirty\+four)
RewriteRule ^/folder/page.php$ http://www.site.com/folder/category/%1?  [L]
RewriteRule ^folder/category/(.+)\+(.+)$ http://www.site.com/folder/category/$1-$2 [L]

第一条规则工作正常,如果单词在查询字符串中,它会完全重定向,但重定向时我不能得到三十四个变为三十四。

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:1)

首先,RewriteRule ^/folder/page.php$永远不会匹配。如果规则在.htaccess文件而不是服务器配置中,则删除URI的前缀(前导斜杠)。

其次,由于您已在目标中包含http://www.site.com/,这意味着浏览器将被重定向而不是内部重写。您需要从第一个规则中删除http://www.site.com/,以便可以应用第二个规则。

答案 1 :(得分:1)

以下是应该起作用的:

RewriteCond %{QUERY_STRING} ^to=(one|seventeen|thirty\+four)
RewriteRule ^folder/page.php$ folder/category/%1  [NC,QSA,L]
RewriteRule ^folder/category/(.+)\+(.+)$ folder/category/$1-$2 [NC,QSA,L]

现在有三个提示:

1)

在询问:

之前,请确保您已阅读所有内容

2)

请尝试使用RewriteLog指令:它可以帮助您追踪问题:

# Trace:
# (!) file gets big quickly, remove in prod environments:
RewriteLog "/web/logs/mywebsite.rewrite.log"
RewriteLogLevel 9
RewriteEngine On

3)

我最喜欢检查regexp的工具:

http://www.quanetic.com/Regex(别忘了选择ereg(POSIX)而不是preg(PCRE)!)

如果您想检查网址并查看网址是否有效,请使用此工具。