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

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

我如何编写一个RewriteRule程序,首先检查请求的文件是否存在,如果不存在,则重定向到根页面:

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

例如 http://example.com/not_existing_file 应重定向到http://example.com

但这样做不起作用。这里出了什么问题?

答案1

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

你的状况,检查请求是否不是映射到现有文件,似乎是正确的。但是,你RewriteRule重定向, 它内部重写请求。它似乎还会触发重写循环(500 错误)?

请尝试以下操作:

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

这里需要该R标志来触发外部重定向。这只会重定向/<something>,而不是/<anything>像原始代码中那样 。

确定一切正常后,将302(临时)重定向更改为(永久)重定向(如果这是必需的)。这样测试起来更容易,因为 301 会被缓存301难的通过浏览器。

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

相关内容