以下是我目前的规则:
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]
第一条规则工作正常,如果单词在查询字符串中,它会完全重定向,但重定向时我不能得到三十四个变为三十四。
非常感谢任何帮助。
答案 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]
在询问:
之前,请确保您已阅读所有内容请尝试使用RewriteLog
指令:它可以帮助您追踪问题:
# Trace:
# (!) file gets big quickly, remove in prod environments:
RewriteLog "/web/logs/mywebsite.rewrite.log"
RewriteLogLevel 9
RewriteEngine On
我最喜欢检查regexp的工具:
http://www.quanetic.com/Regex(别忘了选择ereg(POSIX)而不是preg(PCRE)!)
如果您想检查网址并查看网址是否有效,请使用此工具。