首页 > 解决方案 > Apache URL 重写 UUID v1

问题描述

如何使用 RewriteRule 通过最大检查精确地重写 36 个字符的v1 UUID ?

UUID() returns a value that conforms to UUID version 1 as described in RFC 4122. The value is a 128-bit number represented as a utf8 string of five hexadecimal numbers in aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee format:


请提供比这更好的东西: RewriteRule ^([A-z0-9\-]{36})$ index.php?uuid=$1 [L,QSA]

标签: regexapachemod-rewriteuuid

解决方案


你可以试试:

^[a-fA-F0-9]{8}-(?:[a-fA-F0-9]{4}-){3}[a-fA-F0-9]{12}$

上述正则表达式的解释:

  • ^, $- 分别代表行的开始和结束。
  • [a-fA-F0-9]{8}- 根据文档;作为五个十六进制数字的 utf8 字符串;所以最好只允许十六进制字符。所以; 之前的第一个字符串-是 8 个字符长的十六进制值。
  • (?:[a-fA-F0-9]{4}-){3}- 表示一个非捕获组匹配 16 进制字符 4 次后跟 a-并且整个模式正好重复 3 次。
  • [a-fA-F0-9]{12}- 正好代表十六进制字符 12 次。
  • $0- 对于匹配部分,您可以使用第 0 个捕获组,因为没有特殊捕获。

图示

正则表达式演示


推荐阅读