我如何编写一个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>
部分中。