C.O*_*.O. 5 php regex apache .htaccess
我想这将是一个愚蠢的问题,但我不知道这里发生了什么.我想通过.htaccess文件中的正则表达式匹配一组特定的URI.
我想要以下内容
所以:
^[^.]+$
Run Code Online (Sandbox Code Playgroud)
用于匹配URI中没有点的所有文件.
\.html?$
Run Code Online (Sandbox Code Playgroud)
匹配所有.html/.htm文件
(^[^.]+$)|(\.html?$)
Run Code Online (Sandbox Code Playgroud)
似乎结合两者
(^[^.]+$)|(\.html?$)|(\.php$)
Run Code Online (Sandbox Code Playgroud)
无法将事物与以php结尾的匹配文件组合在一起.例如test.jpg匹配,而不应该匹配.
我一定错过了一些明显的东西.它是什么?谢谢.
更新:这是我使用的整个上下文:
### REWRITE RULES ###
RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule (^[^.]+$)|(\.html?$)|(\.php$) bootstrap.php [L,QSA]
Run Code Online (Sandbox Code Playgroud)
bootstrap.php包含:
echo "testing bootstrap";
Run Code Online (Sandbox Code Playgroud)
查询不存在的.jpg
http://localhost/test.jpg
Run Code Online (Sandbox Code Playgroud)
给我这个输出:
testing bootstrap
...
Run Code Online (Sandbox Code Playgroud)
更新2:
在测试下面的第一个答案后,我发现使用简单的:
RewriteRule \.php$ bootstrap.php [L,QSA]
Run Code Online (Sandbox Code Playgroud)
以与上述相同的方式失败.它匹配test.jpg.虽然服务器配置或.htaccess文件中没有什么疯狂的...这就是.htaccess文件中的全部内容,除了我已发布的内容:
AddType application/x-httpd-php .html
AddType application/x-httpd-php .xml
DirectoryIndex index.php
ErrorDocument 404 /errors/404.php
Run Code Online (Sandbox Code Playgroud)
答案:(无法再将我自己的问题再提出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'
...
Run Code Online (Sandbox Code Playgroud)
所以问题是我的404文档以*.php结束,这就是为什么*.jpg匹配未找到的文件.啊蝙蝠,我会搜索这个很长一段时间......
所以这样做:
RewriteRule ([^4]?[^0]?[^4]\.php) bootstrap.php [L,QSA]
Run Code Online (Sandbox Code Playgroud)
那么,完整的问题的答案是:
RewriteRule (^[^.]+$)|(\.html?$)|([^4]?[^0]?[^4]\.php) bootstrap.php [L,QSA]
Run Code Online (Sandbox Code Playgroud)
再次:谢谢大家.
[好吧,这不是这里的具体解决方案,但我将其作为一个虚假答案。]
当 mod_rewrite 规则出错时,有时启用RewriteLog. httpd.conf它需要在or部分进行配置VirtualHost,因此有点麻烦。但 Apache 会列出它执行的顺序和处理操作以及 URL。这有助于查看 Apache 是否理解正则表达式并且其行为是否正常。
请注意,如果实际的错误源是规则甚至部分,它有时可能保持Alias为Redirect空FileMatch。然而,在这种情况下,error.log甚至只是access.log可能包含一些提示。
如果全部失败,您可能会幸运地暂时启用Nanoweb而不是 Apache。它具有类似的mod_rewrite实现,但使用 PHP preg_matchPCRE 后端。(没有告诉我为什么知道这一点。)
| 归档时间: |
|
| 查看次数: |
1703 次 |
| 最近记录: |