正则表达式重写规则,添加相同长度的前导零

时间:2018-08-09 19:29:04

标签: regex .htaccess mod-rewrite

我尝试重写一些URL,如下所示,在Apache htaccess中

/xyz-12          ---->       /xyz/000012
/xyz-123         ---->       /xyz/000123
/xyz-1234        ---->       /xyz/001234
/xyz-12345       ---->       /xyz/012345
/xyz-123456      ---->       /xyz/123456

我看到数字保持不变。

可以在一个重写规则中编写吗?

感谢。

1 个答案:

答案 0 :(得分:1)

我不知道直接以某种方式在apache RewriteRule中格式化数字的选项。也许有一些模块可以在Internet的深度范围内提供该功能。但是您当然可以使用简单的重写模块执行以下操作:

RewriteEngine on
RewriteRule ^/?xyz-(\d{2})$ /xyz/0000$1 [L]
RewriteRule ^/?xyz-(\d{3})$ /xyz/000$1 [L]
RewriteRule ^/?xyz-(\d{4})$ /xyz/00$1 [L]
RewriteRule ^/?xyz-(\d{5})$ /xyz/0$1 [L]
RewriteRule ^/?xyz-(\d{6})$ /xyz/$1 [L]

还有一个一般性说明:您应该始终喜欢将此类规则放置在http服务器主机配置中,而不要使用动态配置文件(“ .htaccess”)。这些动态配置文件增加了复杂性,通常是导致意外行为,难以调试的原因,并且确实降低了http服务器的速度。仅当您无法访问真正的http服务器主机配置(阅读:真正便宜的服务提供商)或坚持编写自己的规则的应用程序(这显然是安全的噩梦)时,才提供它们作为最后的选择。