【问题标题】:htaccess RewriteRule - Multiple optional parameters in no particular orderhtaccess RewriteRule - 多个可选参数无特定顺序
【发布时间】:2014-03-15 18:23:46
【问题描述】:

我的网页上需要友好的 url,为此我使用了 htaccess 文件。 实际上这很容易,但是有些页面的 url 可以有多个可选参数,没有特定的顺序,我无法想象这些页面的重写规则应该是什么样子。

例如,显示数据库中大量电影列表的页面。您可以按媒体(DVD、蓝光)、年龄、流派进行过滤。您可以按字母、等级等对结果进行排序,并且可以切换页面。所有这些都适用于 url 参数。

index.php?movies

显示所有电影,没有过滤器,没有排序。重写后的 url 应该是这样的:

/movie

目前没有问题。但它也可以是这样的:

index.php?movies&medium=1&genre=3&age=17&sort=alphabet&page=15

这将返回 dvd 上所有 R 级恐怖电影的第 15 页,按名称排序。

参数没有特定的顺序,都是可选的。如果我的 RewriteRule 会像这样

RewriteRule ^movies/([0-9]+)/([0-9]+)/?$

你怎么知道第一个参数是 medium 还是 page 或其他什么? 有没有办法识别参数?

/movies/genre-3/page-15

非常感谢!

【问题讨论】:

  • 你可以使用这样的url:/movies/medium?1/genre/3&age/17/sort/alphabet/page=15来支持URI中的多个参数。
  • 但是重写规则是什么样的?
  • ok 把我的答案贴在下面,看看对你有没有用。

标签: .htaccess rewrite


【解决方案1】:

你可以使用这样的规则:

RewriteEngine On
RewriteBase /

# reucrsion based rule to convert /n1/v1/n2/v2 to /?n2=v2&n1=v1
RewriteRule "([^/]+)/([^/]*)(/.*)?$" $3?$1=$2 [L,QSA]

这会将/movies/medium/1/genre/3&age/17/sort/alphabet/page/15 之类的 URI 重写为:
/?page=15&sort=alphabet&3&age=17&1=genre&movies=medium

【讨论】:

    猜你喜欢
    • 2019-05-01
    • 2012-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多