regex 在mod_rewrite中使用有效正则表达式简化路径

amrnrhlw  于 2023-01-10  发布在  其他
关注(0)|答案(2)|浏览(106)

我需要在mod_rewrite中有一个单边函数,它只使用一个正则表达式给出一个路径,产生一个前缀,不幸的是,我对实现这个系统没有任何控制权。
我只能生成一个正则表达式并将其交给系统管理员。
我需要的是一个正则表达式模式,它是减少路径在两个字符前缀如下
1.案例点:“abc.cde”-〉“ac”(第一个字的第一个字符和第二个字的第一个字符)
1.病例减去:“abc-cde”-〉“ac”(同上)
1.大小写点和点后的减号:“abc.cde-fgh”-〉“ac”
1.大小写减号和减号后的点:“abc-cde.fgh”-〉“af”
1.无点和无减的情况:“随机”-〉“ra”(取前两个字符)
我看到regrex上有一个用于mod_rewrite here的测试器

lp0sw83n

lp0sw83n1#

您可以在站点根目录.htaccess中使用这些规则:

RewriteEngine On

# skip all files and directories from rewrite rules below
RewriteCond %{REQUEST_FILENAME} -d [OR]
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^ - [L]

RewriteRule ^(\w)\w*[.-](\w)\w*/?$ /$1$2 [L,R=301]

RewriteRule ^(\w)[\w-]*\.(\w) /$1$2 [L,R=301]

RewriteRule ^(\w)(\w)[^.-]+$ /$1$2 [L,R=301]
tzdcorbm

tzdcorbm2#

您可以使用“捕获组”(括号)收集所需的字母,并将可能遇到的三个备选项与|连接起来。首先是一个带有点\.的文件名,然后是一个减号-(但没有点,因为如果第一个选项不匹配,我们会选择第二个选项),然后是没有任何减号和点的单词规则(在前两个选项不匹配之后):

s/(.).*\.(.).*|(.).*-(.).*|(..).*/$1$2$3$4$5/

https://regexr.com/3r2to

相关问题