【问题标题】:.htaccess rewrite.htaccess 重写
【发布时间】:2021-05-26 21:09:28
【问题描述】:

我不知道这是否是正确的区域,但这里是:

我有一个RewriteRule

RewriteRule ^(eScience/)?(\w+)/RENDER/(\d+)/(\d+)/P(\d+)\.html$ /RENDER/escience/kids/1016/2063/test.html [L,NC]

这很好,因为我已经硬编码了 ID。现在当我做类似的事情时

RewriteRule ^(eScience/)?(\w+)/RENDER/(\d+)/(\d+)/P(\d+)\.html$ /RENDER/escience/kids/$2/2063/test.html [L,NC]

重写不起作用,我找不到页面。真正奇怪的是$4 有效,所以如果我做类似的事情

RewriteRule ^(eScience/)?(\w+)/RENDER/(\d+)/(\d+)/P(\d+)\.html$ /RENDER/escience/kids/1016/$4/test.html [L,NC]

它可以工作,但是 3 及以下的任何东西都不起作用。有任何想法吗?我使用的网址是 http://www.escience.ca/kids/RENDER/1016/2063/P2063.html

如您所见,$3$4 是完全相同的 ID,这就是我的第三个示例有效的原因。

【问题讨论】:

    标签: regex .htaccess url-rewriting apache2


    【解决方案1】:

    查看您的正则表达式组:

    RewriteRule ^(eScience/)?(\w+)/RENDER/(\d+)/(\d+)/P(\d+)\.html$ /RENDER/escience/kids/$2/2063/test.html [L,NC]
                 $1          $2           $3    $4     $5
    

    它为什么不起作用应该很明显 - $2 不是您期望的数字。如果您不了解编号,也许您应该将命名组用于复杂的正则表达式。顺便说一句,您可以使用?: 运算符将正则表达式组排除在分组之外(例如“(?:ungrouped)(dollar1)(dollar2)”)。

    【讨论】:

    • 你是绝对正确的。出于某种原因,我认为它是基于零的。
    • @JonathanKong:$0 通常是整场比赛。
    猜你喜欢
    • 2010-12-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-09
    • 1970-01-01
    • 2011-08-30
    • 2011-03-19
    • 2011-07-23
    相关资源
    最近更新 更多