php 正则匹配 文件,php – 正则表达式匹配.htaccess中的一系列文件类型

我想这将是一个愚蠢的问题,但我不知道这里发生了什么.我想通过.htaccess文件中的正则表达式匹配一组特定的URI.

我想要以下内容

>所有不包含的文件.

>所有以.htm / .html结尾的文件

>所有以.php结尾的文件

所以:

^[^.]+$

用于匹配URI中没有点的所有文件.

\.html?$

匹配所有.html / .htm文件

(^[^.]+$)|(\.html?$)

似乎结合两者

(^[^.]+$)|(\.html?$)|(\.php$)

无法将事物与以php结尾的匹配文件组合在一起.例如test.jpg匹配,而不应该匹配.

我一定错过了一些明显的东西.

它是什么?谢谢.

更新:这是我使用的整个上下文:

### REWRITE RULES ###

RewriteEngine on

RewriteBase /

RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule (^[^.]+$)|(\.html?$)|(\.php$) bootstrap.php [L,QSA]

bootstrap.php包含:

echo "testing bootstrap";

查询不存在的.jpg

http://localhost/test.jpg

给我这个输出:

testing bootstrap

...

更新2:

在测试下面的第一个答案后,我发现使用简单的:

RewriteRule \.php$bootstrap.php [L,QSA]

以与上述相同的方式失败.它匹配test.jpg.虽然服务器配置或.htaccess文件中没有什么疯狂的…这就是.htaccess文件中的全部内容,除了我已发布的内容:

AddType application/x-httpd-php .html

AddType application/x-httpd-php .xml

DirectoryIndex index.php

ErrorDocument 404 /errors/404.php

答案:(无法再将我自己的问题再提出8个小时……)

谢谢大家帮助我.

特别感谢@mario,他通过下面的评论帮我解决了这个问题.

这确实是一个愚蠢的问题.以下是发生的事情:

rewrite.log:

strip per-dir prefix: D:/Web_Root/test.jpg -> test.jpg

applying pattern '\.php$' to uri 'test.jpg'

pass through D:/Web_Root/test.jpg

strip per-dir prefix: D:/Web_Root/errors/404.php -> errors/404.php

applying pattern '\.php$' to uri 'errors/404.php'

RewriteCond: input='D:/Web_Root/errors/404.php' pattern='!-d' => matched

rewrite 'errors/404.php' -> 'bootstrap.php'

...

所以问题是我的404文档以* .php结束,这就是为什么* .jpg匹配未找到的文件.啊蝙蝠,我会搜索这个很长一段时间……

所以这样做:

RewriteRule ([^4]?[^0]?[^4]\.php) bootstrap.php [L,QSA]

那么,完整的问题的答案是:

RewriteRule (^[^.]+$)|(\.html?$)|([^4]?[^0]?[^4]\.php) bootstrap.php [L,QSA]

再次:谢谢大家.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值