如何编写一个RewriteRule来匹配不存在的文件?

如何编写一个RewriteRule ,它首先检查请求的文件是否存在,如果不存在,则redirect到根页面:

 RewriteCond %{REQUEST_FILENAME} !-f RewriteRule "^/(.*)" "/" [L] 

例如http://example.com/not_existing_file应该redirect到http://example.com

但是这不起作用。 这里有什么问题?

 RewriteCond %{REQUEST_FILENAME} !-f RewriteRule "^/(.*)" "/" [L] 

您的条件 ,检查请求不映射到现有的文件,似乎是正确的。 但是,您的RewriteRule不会redirect ,而是在内部重写请求。 这似乎也会触发一个重写循环(500错误)?

尝试以下方法:

 RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^/. / [R=302,L] 

R标志在这里是必需的,以触发外部redirect 。 这只会redirect/<something> ,而不是/<anything> ,就像在你的原始代码中一样。

一旦确定这个工作正常,将302 (临时)redirect改为301 (永久) – 如果这是必需的。 使testing变得更简单,因为301s被浏览器强制caching。

这也假定这是在主服务器configuration中,而不是.htaccess<Directory>部分。