正则表达式负前瞻不适用于不同 Apache 版本之间的 mod_rewrite

tjb*_*jbp 6 mod-rewrite regex apache-1.3

我有一个在 Apache 2.2 下工作的 mod_rewrite 行,但不在 Apache 1.3 下:

RewriteRule     ^(?!index.php)(?!skin/)(?!js/)(.+)      /index.php?file=$1              [NC,L]
Run Code Online (Sandbox Code Playgroud)

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

Ada*_*ire 7

Apache 1.3 不使用 Perl 兼容的正则表达式 (PCRE),它使用 POSIX 正则表达式。POSIX 正则表达式不支持负前瞻。PCRE 支持是Apache 2 中的一项新功能

至于如何让它工作,你可能需要使用一些 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]
Run Code Online (Sandbox Code Playgroud)

当然,我还没有测试过这个……我没有任何 Apache 1.3 了。