ModRewrite:重定向除根“/”之外的任何内容?

ModRewrite:重定向除根“/”之外的任何内容?

我正在尝试做一些非常简单的事情:如果用户请求主页,http://www.OurSite.com/,然后停止所有规则并正常提供文件。如果请求任何其他内容,则静默重定向到 php 脚本。

我正在使用这个:

RewriteCond %{REQUEST_URI} !^/$ [NC]
RewriteRule .* /000_ROUTE.php [L]

看来我的条件被忽略了,主页也重定向了。

我怎样才能让它工作?

答案1

如果该规则在 .htaccess 文件中使用,请使用

RewriteCond %{REQUEST_URI} !^/000_ROUTE.php$
RewriteRule . /000_ROUTE.php [L]

如果它在你的 VirtualHost 块或主配置文件中,请使用

RewriteCond %{REQUEST_URI} !^/000_ROUTE.php$
RewriteRule /. /000_ROUTE.php [L]

(唯一的区别是 RewriteRule 上的前导斜杠)。

Apache httpd 在评估 RewriteConds 之前所做的第一件事是评估 RewriteRule。将条件放入规则中(在本例中,条件是斜杠后至少有一个字符)可使 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]

或服务器上下文。

相关内容