提问人:bennet 提问时间:9/8/2023 更新时间:9/9/2023 访问量:31
根据 URL 中存在的 ID(较低/较高)在 .htaccess 中重定向
Redirect in .htaccess based on ID (lower / greater) present in the URL
问:
我正在努力进行重定向,一开始对我来说很简单,但事实并非如此。我想根据输入 URL 中存在的数字 ID 在 .htaccess 文件中进行重定向。 例 https://example.com/bla-id200000.html
- 如果“id”> 200000,则重定向到 https://example.com/item?id=300000
- 如果“id”< 200000,请重定向到 https://subdomain.example.com/item?id=100000
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]
结果是:内部服务器错误
答:
0赞
Kaddath
9/8/2023
#1
如果你有 Apache 2.4+,你可以将 expr
与数字运算符一起使用,这些运算符是:
- -eq 等于
- -ne 不等于
- -lt 低于
- -le 更低或相等
- -gt 大于
- -ge 大于或等于
所以你可以试试这个而不是:RewriteCond %2<200000
RewriteCond expr "%2 -lt 200000"
还有一个整数比较,但我没有找到它的用法示例,可能是这样的integercomp
RewriteCond 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
经过测试,幸运的是,它可以正常工作
评论