gpt4 book ai didi

regex - 如何在 mod_rewrite 规则中保留现有的查询字符串

转载 作者:行者123 更新时间:2023-12-04 23:10:43 24 4
gpt4 key购买 nike

我正在尝试重写以下网址:

http://domain.com/aa/whatever/whatever.php

http://domain.com/whatever/whatever.php?language=aa

但是,根据现有的 $_GET 变量,它必须是 ?language 或 &language。

为此,我使用了 2 个带有 [L] 标志的正则表达式:

RewriteRule ^([a-z]{2})/(.*\.php\?.*) /$2&language=$1 [L]
RewriteRule ^([a-z]{2})/(.*) /$2?language=$1 [L]

第二个按预期工作......然而,第一个从未被击中(它落入第二个正则表达式,它确实击中了),即使 Regex Coach 确实告诉我它应该。

编辑:

如果只是读到我需要使用两个反斜杠来转义问号。如果我这样做,它确实会遇到第一个正则表达式,但永远不会找到其他 GET 变量。

最佳答案

来自 documentation for mod_rewrite RewriteRule 中的模式与主机名和端口之后和查询字符串之前的 URL 部分匹配,因此不包括查询字符串。这就是为什么你没有得到其他变量的原因。

添加新的查询字符串参数 language=xx在保留任何现有查询字符串的同时,您需要使用 QSA 标志(查询字符串追加)。有了这个标志,基于你的第二种情况的一条规则就足够了:

RewriteRule ^([a-z]{2})/(.*) /$2?language=$1 [QSA]

关于regex - 如何在 mod_rewrite 规则中保留现有的查询字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1525301/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com