在重写正则表达式之后 PHP 不读取第二个 $_GET 变量
Posted
技术标签:
【中文标题】在重写正则表达式之后 PHP 不读取第二个 $_GET 变量【英文标题】:PHP doesn't read the second $_GET variable after rewriterule regex 【发布时间】: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)
【问题讨论】:
【参考方案1】:这是我看到的。
-
您的链接必须看起来像您想要作为变量传递的内容。如果您想传递两个变量,那么您的链接应类似于
/3.05/items
或 1.0.0.315/champions
重写规则不理解“等”的含义。它们非常精确。他们要么匹配正则表达式,要么不匹配。因此,您必须在创建它们时具体说明您希望它们做什么。
这些是您正在寻找的规则
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 并且我的正则表达式必须是精确的,因为我对此文件也几乎没有其他重写规则以上是关于在重写正则表达式之后 PHP 不读取第二个 $_GET 变量的主要内容,如果未能解决你的问题,请参考以下文章
正则表达式 - 匹配第二个逗号(或逗号和空格)之后的所有内容