【问题标题】:PHP doesn't read the second $_GET variable after rewriterule regex在重写正则表达式之后 PHP 不读取第二个 $_GET 变量
【发布时间】:2015-12-09 07:03:32
【问题描述】:

这是我的重写规则

我的链接看起来像 3.5 或 1.0.0.315 3.05 等

RewriteRule ^([0-9]+\.([0-9]+)?[^a-zA-Z]+)$ index.php?Patch_No=$1 [NC,L]

下面我的链接应该是 3.5&items 3.5&champions 1.0.0.315&items etc.

RewriteRule ^([0-9]+\.([0-9]+)?[^a-zA-Z]+)&([a-zA-Z_-]+)$ index.php?Patch_No=$1&tab=$2 [NC,L]

我确实得到了 $_GET['Patch_No'] ,但我没有得到 $_GET['tab'] 由于某种原因从未设置此变量。

这样就可以正常使用了

^([0-9]+\.[0-9]+[^a-zA-Z]+)$

但它与 3.5 不匹配,它仅适用于 3.05 3.26 1.0.0.125 等数字,但我需要它与 3.5 一起使用,所以我添加了

^([0-9]+\.([0-9]+)?[^a-zA-Z]+)

它适用于我在上面发布的第一个 RewriteRule,但它不适用于带有选项卡变量的第二个

这里还有 var_dump($_GET);

array (size=2)
  'Patch_No' => string '3.5' (length=3)
  'tab' => string '' (length=0)

【问题讨论】:

    标签: php regex .htaccess


    【解决方案1】:

    这是我看到的。

    1. 您的链接必须看起来像您想要作为变量传递的内容。如果您想传递两个变量,那么您的链接应类似于 /3.05/items1.0.0.315/champions
    2. 重写规则不理解“等”的含义。它们非常精确。他们要么匹配正则表达式,要么不匹配。因此,您必须在创建它们时具体说明您希望它们做什么。

    这些是您正在寻找的规则

    RewriteRule    ^([0-9]+).([0-9]+)$    index.php?Patch_No=$1    [NC,L,QSA] # allows two sets of numbers
    RewriteRule    ^([0-9]+).([0-9]+)&([A-Za-z]+))$    index.php?Patch_No=$1    [NC,L,QSA] # allows two sets of numbers & text
    RewriteRule    ^([0-9]+).([0-9]+).([0-9]+).([0-9]+)$    index.php?Patch_No=$1    [NC,L,QSA] # allows 4 sets of numbers
    RewriteRule    ^([0-9]+).([0-9]+).([0-9]+).([0-9]+)&([A-Za-z]+)$    index.php?Patch_No=$1    [NC,L,QSA] # allows 4 sets of numbers & text
    

    我为您提供了两组数字和四组数字的查询规则,因为这些是您在问题中给我们的示例。

    但是,您可以通过在规则中添加或删除.([0-9]+) 来制作任意数量的内容。

    【讨论】:

    • 我希望链接看起来像 3.05&items 并且它在我发布的代码中工作得很好,除了 3.5 并且我的正则表达式必须是精确的,因为我对此文件也几乎没有其他重写规则
    猜你喜欢
    • 1970-01-01
    • 2017-01-23
    • 2023-03-12
    • 1970-01-01
    • 2012-07-07
    • 1970-01-01
    • 1970-01-01
    • 2011-07-07
    • 2021-02-23
    相关资源
    最近更新 更多