如何匹配所有以.php结尾的页面,排除download.php和upload.php?
正则解决方案:匹配.php页面并排除指定文件
问题分析
你当前用的正则^(^(?!download|upload).*)\.php$有两个问题:
- 多了一个冗余的
^锚点,导致正则结构错误; - 负向预查仅检查字符串开头是否非download/upload,所以像somethingdownload.php这类文件会被匹配——如果这不符合你的需求,得根据实际目标调整正则逻辑。
分场景解决方案
场景1:仅排除download.php和upload.php两个精确文件
如果只想排除这两个特定文件,其他所有.php文件(包括带参数的、包含download/upload的)都要匹配,用这个正则:
^(?!(download|upload)\.php($|\?)).*\.php($|\?)
- 逻辑说明:
^(?!(download|upload)\.php($|\?)):通过负向预查排除精确匹配的download.php、upload.php,以及带参数的版本(比如download.php?id=1);.*\.php($|\?):匹配所有以.php结尾(含带参数)的页面。
如果不需要匹配带参数的页面,简化为:
^(?!(download|upload)\.php$).*\.php$
场景2:排除所有以download或upload开头的.php文件
如果要排除所有以download/upload开头的.php文件(比如download-list.php、upload-test.php),但允许中间包含download/upload的文件(比如somethingdownload.php),用:
^(?!download|upload).*\.php($|\?)
- 逻辑说明:
^(?!download|upload)确保字符串开头不是download或upload,后续匹配所有以.php结尾的内容。
场景3:排除所有含download或upload的.php文件
如果要排除任何文件名里包含download/upload的.php文件(比如somethingdownload.php、upload-abc.php全排除),用:
^(?!.*(download|upload)).*\.php($|\?)
- 逻辑说明:
^(?!.*(download|upload))确保整个字符串里不出现download或upload,再匹配以.php结尾的内容。
内容的提问来源于stack exchange,提问作者jum
相关产品推荐
相关产品推荐

