【问题标题】:Mod Rewrite Optional ParametersMod重写可选参数
【发布时间】:2010-12-13 20:50:42
【问题描述】:

我有一套相当复杂的重写规则来为我的网站页面提供漂亮的 URL。现在为了处理搜索结果的分页,我使用了 2 个重写规则:

RewriteRule ^search/([0-9]+)$ /cgi-bin/search.pl?page=$1 [NC,L,QSA]
RewriteRule ^search$ /cgi-bin/search.pl [NC,L,QSA]

这些处理 URL,例如:

http://example.com/search
http://example.com/search/2
http://example.com/search/1000

我想知道如何将这些组合成 1 个重写规则,以便正确调用 search.pl 脚本,并且仅在指定页面时才传递页面参数。我知道这是一个非常基本的问题,但我似乎无法在任何地方找到答案。感谢您的帮助!

【问题讨论】:

  • 看起来前几个答案的方向有点不对。我更多地考虑重做正则表达式,以便页面参数是可选的。可能类似于: RewriteRule ^search(/([0-9]+))?$ /cgi-bin/search.pl?page=$1 [NC,L,QSA] 但它需要实际工作。
  • @Russell C.:将 $1 替换为 $2,因为您希望匹配第二个括号组。
  • 对 URL 进行了两个单独的更改 - (1) 转到 cgi-bin/search.pl 和 (2) 如果有页码,则将其作为参数传递。这是两个 RewriteRules 是合乎逻辑的。你为什么要做一个?

标签: mod-rewrite paging


【解决方案1】:

你可以这样做:

RewriteCond page=$2 ^page=.+|
RewriteRule ^search(/([0-9]+))?$ /cgi-bin/search.pl?%0 [NC,L,QSA]

但这并不是更好,不是吗?


编辑    或者如果您可以使用空的 page 值:

RewriteRule ^search(/([0-9]+))?$ /cgi-bin/search.pl?page=$2 [NC,L,QSA]

【讨论】:

  • 第二个。奇迹般有效。谢谢秋葵!
  • 谢谢@Gumbo,这对我也有帮助!
【解决方案2】:

可以rewritemap 与一个小的外部脚本一起使用,该脚本将非空映射到?page=$1 并将空映射到空。我建议坚持你所拥有的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多