【问题标题】:Rewrite Search Results重写搜索结果
【发布时间】:2012-04-18 06:02:28
【问题描述】:

我已经阅读了有关 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

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

【问题讨论】:

  • 恕我直言,您可以尝试拆分问题,例如分别处理 nggpage 和另一种情况。
  • 当您说要将www.domain.com/?s=query 重写为www.domain.com/search/query 时,您的意思是如果有人键入第一个,您希望浏览器窗口重定向到第二个,还是希望人们键入第二个要改写成第一个?
  • 当有人键入 www.domain.com/?s=query 时,他会被重定向到 www.domain.com/search/query 女巫具有相同的内容。给定的规则已经成功了,但是在处理第二个变量(nggpage)时,这就是困难的部分。是的@g13n 我已经尝试过但没有成功。

标签: .htaccess mod-rewrite


【解决方案1】:

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

  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]
    

【讨论】:

    猜你喜欢
    • 2014-10-01
    • 2021-01-01
    • 2011-04-04
    • 1970-01-01
    • 1970-01-01
    • 2011-08-27
    • 2020-12-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多