我试图做一些非常简单的事情:如果用户请求主页http://www.OurSite.com/ ,则停止所有规则并正常提供文件。 如果世界上还有其他东西被请求,那就静静地redirect到一个php脚本。
我正在使用这个:
RewriteCond %{REQUEST_URI} !^/$ [NC] RewriteRule .* /000_ROUTE.php [L]
似乎我的情况正在被忽略,主页也正在redirect。
我怎样才能做这个工作?
如果规则在.htaccess文件中使用,请使用
RewriteCond %{REQUEST_URI} !^/000_ROUTE.php$ RewriteRule . /000_ROUTE.php [L]
如果它在您的VirtualHost块或主configuration文件,而是使用
RewriteCond %{REQUEST_URI} !^/000_ROUTE.php$ RewriteRule /. /000_ROUTE.php [L]
(唯一不同的是RewriteRule上的前导斜杠)。
Apache httpd在评估RewriteConds之前做的第一件事就是评估RewriteRule。 将条件放入规则(在这种情况下,条件是至less有一个斜杠后面的字符)可以节省Apache必须对“/”处的请求完全评估RewriteCond。 RewriteCond确保你不会以重写的循环结束 – 毕竟,000_ROUTE.php不是“/”。)
取决于这个规则多久会被击中(也就是说,如果你期望它被击中了很多,从而分离出一个RewriteCond就会增加开销),你也可以把它压缩成
RewriteRule ^(?!000_ROUTE.php). /000_ROUTE.php [R,L]
为.htaccess或-contexts
RewriteRule ^/(?!000_ROUTE.php). /000_ROUTE.php [R,L]
或服务器上下文。