mod-rewrite – 正则表达式负面预测不适用于不同Apache版本之间的mod_rewrite

前端之家收集整理的这篇文章主要介绍了mod-rewrite – 正则表达式负面预测不适用于不同Apache版本之间的mod_rewrite前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个mod_rewrite行在Apache 2.2下工作,但不在Apache 1.3下:
RewriteRule     ^(?!index.PHP)(?!skin/)(?!js/)(.+)      /index.PHP?file=$1              [NC,L]

如果我丢失括号之间的负前瞻组件,我将丢失500状态代码. GoDaddy不会为这个客户端的软件包(叹息)升级httpd,所以有人有一个可以在1.3中工作的解决方案(而且不是太乱了:P)?或者甚至更好的人可以解释这里可能会发生什么?我仍然很好奇,因为我找不到任何关于1.3中使用的Perl正则表达式引擎的信息,不支持负面预测……

Apache 1.3不使用Perl兼容的常规expressoins(PCRE),它使用POSIX正则表达式. POSIX正则表达式不支持负向前瞻.从Apache 2开始,PCRE支持new feature.

至于如何使其工作,你可能需要使用一些RewriteCond,如果它匹配这三个中的一个,则规则不会触发……例如也许:

RewriteCond   %{REQUEST_URI}   !index.PHP.*
RewriteCond   %{REQUEST_URI}   !skin/.*
RewriteCond   %{REQUEST_URI}   !js/.*
RewriteRule   ^(?!index.PHP)(?!skin/)(?!js/)(.+)  /index.PHP?file=$1    [NC,L]

当然,我还没有对此进行测试……我已经没有任何Apache 1.3了.

猜你在找的正则表达式相关文章