根据 URL 中存在的 ID(较低/较高)在 .htaccess 中重定向

Redirect in .htaccess based on ID (lower / greater) present in the URL

提问人:bennet 提问时间:9/8/2023 更新时间:9/9/2023 访问量:31

问:

我正在努力进行重定向,一开始对我来说很简单,但事实并非如此。我想根据输入 URL 中存在的数字 ID 在 .htaccess 文件中进行重定向。 例 https://example.com/bla-id200000.html

ID 可以有 6 位或 7 位数字

我的第一次尝试是问 ChatGPT,它给了我很少的线索,但最终浪费了我大约 2 个小时的时间,因为它的解决方案不起作用。根据 chatgpt 的说法,问题是 RewriteCond 不支持像 < 这样的直接比较运算符来捕获组匹配。

谁能帮我解决这个问题?任何提示将不胜感激:)

我试过了

RewriteCond %{REQUEST_URI} ^/([^/]+)-id(\d+)\.html$
RewriteCond %2<200000
RewriteRule .* https://subdomain.example.com/item?id=%2 [L]

RewriteCond %{REQUEST_URI} ^/([^/]+)-id(\d+)\.html$
RewriteRule .* item?id=%2 [L,QSA]

结果是:内部服务器错误

正则表达式 .htaccess 重定向 mod-rewrite

评论


答:

0赞 Kaddath 9/8/2023 #1

如果你有 Apache 2.4+,你可以将 expr 与数字运算符一起使用,这些运算符是:

  • -eq 等于
  • -ne 不等于
  • -lt 低于
  • -le 更低或相等
  • -gt 大于
  • -ge 大于或等于

所以你可以试试这个而不是:RewriteCond %2<200000

RewriteCond expr "%2 -lt 200000"

还有一个整数比较,但我没有找到它的用法示例,可能是这样的integercompRewriteCond integercomp %2 -lt 200000

评论

0赞 bennet 9/8/2023
谢谢,但是它不起作用。看起来 %2 参数没有传递给 RewriteCond expr “%2 -lt 200000” 或不允许在 expr 中
0赞 bennet 9/8/2023
当我输入 RewriteCond expr “999999 -lt 200000” 时,此规则工作正常。我只是无法访问 %2 变量
0赞 Kaddath 9/8/2023
嗯,你有没有试过测试你是否真的捕获了好的值,例如在测试重定向中,并在脚本中检查你得到了什么?它可能是你的正则表达式或语法,有时,我不知道为什么,在双引号“”内,不能正常工作的表达式可以工作RewriteRule .* item?id=%2&test=%1 [L,QSA]
0赞 bennet 9/8/2023 #2

我终于明白了!

RewriteCond   "%1" "<200000"

以上效果很好。

评论

1赞 Kaddath 9/8/2023
请注意,您仍然应该使用,因为即使看起来有效,比较也是字典式的(例如字母,尚未在 .htaccess 中测试,但理论上会是错误的,因为-lt<"320" < "2000""3" > "2")
0赞 bennet 9/9/2023
经过测试,幸运的是,它可以正常工作