【问题标题】:Recursive htaccess rewrite rule递归 htaccess 重写规则
【发布时间】:2016-06-21 04:02:51
【问题描述】:

我使用这个 htaccess 重写器:

RewriteRule ^([a-z]{2}|[a-z]{2}\-[A-Z]{2})/?$ /index.php?lang=$1 [L]
RewriteRule ^([a-z]{2}|[a-z]{2}\-[A-Z]{2})/([^/]*)/?$ /index.php?lang=$1&controller=$2 [L]
RewriteRule ^([a-z]{2}|[a-z]{2}\-[A-Z]{2})/([^/]*)/([^/]*)/?$ /index.php?lang=$1&controller=$2&p1=$3 [L]
RewriteRule ^([a-z]{2}|[a-z]{2}\-[A-Z]{2})/([^/]*)/([^/]*)/([^/]*)/?$ /index.php?lang=$1&controller=$2&p1=$3&p2=$4 [L]
RewriteRule ^([a-z]{2}|[a-z]{2}\-[A-Z]{2})/([^/]*)/([^/]*)/([^/]*)/([^/]*)/?$ /index.php?lang=$1&controller=$2&p1=$3&p2=$4&p3=$5 [L]
RewriteRule ^([a-z]{2}|[a-z]{2}\-[A-Z]{2})/([^/]*)/([^/]*)/([^/]*)/([^/]*)/([^/]*)/?$ /index.php?lang=$1&controller=$2&p1=$3&p2=$4&p3=$5&p4=$6 [L]
RewriteRule ^([a-z]{2}|[a-z]{2}\-[A-Z]{2})/([^/]*)/([^/]*)/([^/]*)/([^/]*)/([^/]*)/([^/]*)/?$ /index.php?lang=$1&controller=$2&p1=$3&p2=$4&p3=$5&p4=$6&p5=$7 [L]

如您所见,其逻辑是第一个参数是语言格式(即:enen-US),第二个参数是控制器,其余为参数命名为'p' concat n,其中n是参数的序号(p1/p2/p3)

现在,我想添加如下内容:

RewriteRule ^([a-zA-Z0-9]{3,})/?$ /index.php?defaultcontroller=true&p1=$1 [L]
RewriteRule ^([a-zA-Z0-9]{3,})/([^/]*)/?$ /index.php?defaultcontroller=true&p1=$1&p2=$2 [L]
// And so on ...

这是在尝试如果第一个参数不是语言格式,控制器是默认控制器,第一个参数是p1,第二个是p2,以此类推。但这有三个问题:

  • ([a-zA-Z0-9]{3,}) 不是 ([a-z]{2}|[a-z]{2}\-[A-Z]{2}) 的否定。像 http://example.com/ehttp://example.com/3n 这样的 URL 不会匹配任何模式(它们应该匹配第二个)。
  • 我最终会得到超过 10 行。
  • 我有参数限制。 http://example.com/es-US/controller/p1/p2/p3/p4/p5/p6 不会匹配任何模式。

所以,请你帮我把它简化为只有两行的(某种)递归代码(第一个参数是语言格式,第一个参数是非语言形成)?

【问题讨论】:

    标签: apache .htaccess mod-rewrite recursion


    【解决方案1】:

    您可以使用以下 1 条衬里:

        RewriteRule ^(en|en-US)/?([^/]*)/?([^/]*)/?([^/]*)/?([^]*)/([^/]*)/?([^/]*)/?$ /index.php?lang=$1&controller=$2&p1=$3&p2=$4&p3=$5&p4=$6&p5=$7 [L]
    

    【讨论】:

    • 我猜这使得参数成为可选的。好的。我不能使用(en|en-US),而是([a-z]{2}|[a-z]{2}\-[A-Z]{2}),因为我必须接受许多语言代码。另外,你知道如何否定([a-z]{2}|[a-z]{2}\-[A-Z]{2})吗?
    猜你喜欢
    • 2011-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多