regex - Mod 重写正则表达式 : How to allow only one period between other characters?

标签 regex apache mod-rewrite url-rewriting

我正在编写一个 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 或其他地方完成?

类似问题:this onethis one .

谢谢。

最佳答案

我无法用一条规则做到这一点,所以我使用了两条:

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/

相关文章:

apache - htaccess设置单个文件的模仿类型

php - mod_rewrite 错误和权限被拒绝

javascript - 如何通过正则表达式替换路径中的任意字符串?

java - Apache Poi 将渐变颜色应用于单元格

php - 在特殊目录上禁用一些 php 函数

java - 使用 Web 应用程序的 Apache 服务器 session 身份验证

apache - 我如何使用 mod rewrite 重写除少数 https 之外的所有 url

Java 正则表达式沿着单词、标点符号和空格进行分割,并将所有内容保存在一个数组中

Python 正则表达式解析

c# - 正则表达式解析命令行