2012-04-18 51 views
2

我已经经历了关于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

恕我直言,你可以尝试分裂问题像处理'nggpage'分开并单独另一种情况。 – g13n 2012-04-18 06:11:06

+0

当你说你想将'www.domain.com/?s = query'重写为'www.domain.com/search/query'时,你的意思是如果有人键入第一个你希望浏览器窗口重定向到第二个,或者你想让人们输入第二个,并将其重写为第一个? – baynezy 2012-04-18 06:11:25

+0

当有人输入www.domain.com/?s=query时,他会被重定向到www.domain.com/search/query女巫的内容相同。给定的规则已经做到了,但是当涉及到处理第二个变量(nggpage)时,那是困难的部分。是的@ g13n我已经尝试过但没有成功。 – Ace 2012-04-18 06:45:26

回答

2

我认为你将不得不在多个步骤中分解重写。事情是这样做的工作,我简化了一下您的条件:

  1. 检查搜索PARAM存在,改写到目标路径,并设置env标志后面的测试

    RewriteCond %{QUERY_STRING} s=([^&\ ]+) 
    RewriteRule ^/?$ /search/%1 [E=redirect:true] 
    
  2. 如果重定向设置和分页参数是发现,追加了分页

  3. 的路径删除分页第1页

    RewriteCond %{ENV:redirect} true 
    RewriteRule ^/(.*)/nggpage-1$ /$1 
    
  4. 如果重定向设置,让我们重定向

    RewriteCond %{ENV:redirect} true 
    RewriteRule ^/(.*)$ http://www.domain.com/$1? [R=301,L]