我正在编写一个 mod 重写规则,只允许任意长度字符之间有一个句点。这些字符必须以字母开头,后跟 2-29 个字符或数字,并且中间仅允许有一个句点(可选)(但绝不是在末尾)。
这是我到目前为止所拥有的:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([a-z]([.a-z0-9]{2,29}))$ user.php?u=$1 [NC,QSA,L]
此规则不起作用,因为它允许诸如 f.oo
(有效)、foo.
(无效)、f.o.o
(无效)之类的内容),甚至f......
。
是否可以仅使用 apache 的 mod 重写来完成?或者检查是否必须在 PHP 或其他地方完成?
谢谢。
最佳答案
我无法用一条规则做到这一点,所以我使用了两条:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond $1 ^.{3,30}$
RewriteRule ^([a-z][a-z0-9]*(?:\.[a-z0-9]+)?)$ user.php?u=$1 [NC,QSA,L]
关于regex - Mod 重写正则表达式 : How to allow only one period between other characters?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14018685/