我经历过关于mod_rewrite的每一个教程,但我无法弄明白。
我想将搜索网址从www.domain.com/?s=query
重写为www.domain.com/search/query
。
到目前为止,我设法使用此规则实现了这一目标:
RewriteCond %{THE_REQUEST} ^[A-Z]+\ /(#[^?&\ ]*)?\?([^&\ ]*&)?s=([^&\ ]+)[^\ ]*\ HTTP/
RewriteRule ^$ http://www.domain.com/search/%3? [R=301,L]
问题在于,某些查询会导致可以通过www.domain.com/?s=query&nggpage=n
访问多个搜索结果页面(其中n优于2)。
在这种情况下,我想重写一下,最后得到像www.domain.com/search/query/nggpage-n
这样的网址。
不太确定如何实现这一目标。我正在寻求帮助。
答案 0 :(得分:2)
我认为你必须分多步重新分解重写。这样的事情可以完成这项工作,我简化了你的条件:
检查搜索参数是否存在,重写到目标路径并为以后的测试设置env
标志
RewriteCond %{QUERY_STRING} s=([^&\ ]+)
RewriteRule ^/?$ /search/%1 [E=redirect:true]
如果设置了重定向并找到了分页参数,请附加分页路径
RewriteCond %{ENV:redirect} true
RewriteCond %{QUERY_STRING} nggpage=(\d+)
RewriteRule ^/(.*)$ /$1/nggpage-%1
删除第1页的分页
RewriteCond %{ENV:redirect} true
RewriteRule ^/(.*)/nggpage-1$ /$1
如果设置了重定向,则让我们重定向
RewriteCond %{ENV:redirect} true
RewriteRule ^/(.*)$ http://www.domain.com/$1? [R=301,L]