【问题标题】:mod rewrite with a lot of parametersmod重写了很多参数
【发布时间】:2011-01-14 07:58:51
【问题描述】:

我正在尝试为我的问题找到一个 mod 重写解决方案。

我有将近 6 个参数传递给我的 url,我想重写。

让我演示一个 3 个参数 (x,y,z) 的示例

url 是 list.php?x=1&y=2&z=3 所以规则是

RewriteRule ^list/x/([^/\.]+)/y/([^/\.]+)/z/([^/\.]+)/?$ list.php?x=$1&y=$2&z=$3

到目前为止还不错。

真正棘手的部分(至少对我而言)是参数 x,y,z 没有预测顺序,因此 url 可能是

list.php?z=2&x=4&y=9

list.php?y=2&z=4&x=9

加 参数不能全部放在一起 前

list.php?z=4

list.php?x=7&z=7

或 3 个参数的任意组合

所以对于 3 个参数,我必须编写所有可能的组合 (RewriteRule)

所以我的 htaccess 实际上是 7 页,有 6 个参数,如果想再添加一个,必须编写新规则并更正所有其他规则

还有其他方法可以实现吗?

举例

如果 mod 单独重写每个参数,但是当多个参数来自 URL 以组合每个参数的规则时。

示例

RewriteRule parameter x rewrite to x/$1
RewriteRule parameter y rewrite to y/$2

所以当两个参数都变成 x/$1/y/$2

或者一些聪明的方法,我不必编写 7 页的规则并且更容易修改

我希望它清楚

【问题讨论】:

  • 如果参数可以是任何顺序,它们不应该作为路径信息传递。路径信息仅适用于分层名称。
  • 有什么理由不只使用查询字符串?
  • 除非您正在创建重复的内容,这对 SEO 不友好 (google.com/support/webmasters/bin/…)。此外,“list/x/1/y/2/z/3”并不比“list?x=1&y=2&z=3”更干净。您需要传递给脚本的实际参数是什么?

标签: mod-rewrite


【解决方案1】:

这样的东西应该可以工作

RewriteRule ^list/(?=(?:x/(\d+))?)(?=(?:y/(\d+))?) /list.php?x=$1&y=$2

虽然它会产生空参数,但这可能没问题。

【讨论】:

  • 感谢您的申请,但我不能有空参数
  • 所以这会破坏? /list.php?x=&y=1
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-13
  • 1970-01-01
  • 1970-01-01
  • 2016-02-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多