【问题标题】:Mod rewrite with 3 parameters?Mod用3个参数重写?
【发布时间】:2010-03-21 00:01:10
【问题描述】:

我做了很多方法来弄清楚如何重写这个 mod,但 O 完全不成功。

我想要一个用以下方法重写的 .htaccess 代码:

  • /apple/upcoming/2/handler.php?topic=apple&orderby=upcoming&page=2

这很容易做到,但问题是所有参数都不是必需的,因此链接每次都有不同级别的参数,如下所示:

  • /apple/popular/2/handler.php?topic=apple&orderby=popular&page=2
  • /apple/2/handler.php?topic=apple&orderby=&page=2
  • /all/popular/2/handler.php?topic=all&orderby=popular&page=2
  • /apple/upcoming//handler.php?topic=apple&orderby=upcoming&page=

简单地说,URL 在一个静态顺序中有 3 个可选参数:(topic) (orderby) (page)

注意:ORDERBY 参数可以是“流行”或“即将推出”或什么都没有。

谢谢

【问题讨论】:

    标签: .htaccess mod-rewrite


    【解决方案1】:

    我建议将域名(/apple/upcoming/2) 之后的所有内容重定向到 index.php,然后使用 php 解析 url 并调用适当的函数。

    【讨论】:

    • +1 你不能在没有查询的情况下使用 mod rewrite 重写 url。
    • 任何 modrewrite 代码将域名后的所有内容重定向到 handler.php?everything=XXXX ?谢谢
    • @Sandeep Bansal:这完全是错误的。您当然可以使用 mod_rewrite 重写每个请求,而无需触及查询。
    【解决方案2】:

    这应该可行:

    RewriteRule     ^([0-9]*)/?$ handler.php?topic=&orderby=&page=$1 [L]
    RewriteRule     ^(upcoming|popular)/([0-9]*)/?$ handler.php?topic=&orderby=$1&page=$2 [L]
    RewriteRule     ^([^/]*)/([0-9]*)/?$ handler.php?topic=$1&orderby=&page=$2 [L]
    RewriteRule     ^([^/]*)/(upcoming|popular)/?$ handler.php?topic=$1&orderby=$2&page= [L]
    RewriteRule     ^([^/]*)/(upcoming|popular)/([0-9]*)/?$ handler.php?topic=$1&orderby=$2&page=$3 [L]
    

    您应该简单地按首选顺序声明重写。

    【讨论】:

      【解决方案3】:

      对于您在上面提供的情况,规则应该有效:

      RewriteRule     ^([^/]+)/(\d+)/?$ handler.php?topic=$1&orderby=&page=$2 [L]
      RewriteRule     ^([^/]+)/([^/]+)/?$ handler.php?topic=$1&orderby=$2&page= [L]
      RewriteRule     ^([^/]+)/([^/]+)/(\d+)/?$ handler.php?topic=$1&orderby=$2&page=$3 [L]
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-02-27
        • 2010-12-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多