2

我已经阅读了有关 mod_rewrite 的每一个教程,但我无法弄清楚这一点。

我想将搜索网址从 重写www.domain.com/?s=querywww.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

不太确定如何实现。我正在寻求帮助。

4

1 回答 1

2

我认为您将不得不分多个步骤分解重写。像这样的东西可以完成这项工作,我简化了你的条件:

  1. 检查是否存在搜索参数,重写目标路径并设置env标志以供以后测试

    RewriteCond %{QUERY_STRING} s=([^&\ ]+)
    RewriteRule ^/?$ /search/%1 [E=redirect:true]
    
  2. 如果设置了重定向并找到了分页参数,则附加分页路径

    RewriteCond %{ENV:redirect} true
    RewriteCond %{QUERY_STRING} nggpage=(\d+)
    RewriteRule ^/(.*)$ /$1/nggpage-%1
    
  3. 删除第 1 页的分页

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

    RewriteCond %{ENV:redirect} true
    RewriteRule ^/(.*)$ http://www.domain.com/$1? [R=301,L]
    
于 2012-04-18T09:56:46.743 回答