我有一个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了.