.htaccess url-rewrite 如果文件不存在

Posted

技术标签:

【中文标题】.htaccess url-rewrite 如果文件不存在【英文标题】:.htaccess url-rewrite if file not exists 【发布时间】:2011-07-25 02:32:58 【问题描述】:

我必须为网站做一个小技巧! 这个想法是:

如果存在所需 url 的文件,那么我会转到该 url,什么都不做; 如果所需 url 的文件不存在,我必须转到 file.php 并做一些事情,但不要更改 url!

示例:

www.mysite.com/page1.htm -> 存在 -> 转到文件 page1.htm

www.mysite.com/page2.htm -> 不存在 -> 转到文件 default.php 但网址为“www.mysite.com/page2.htm”

这一切都可以通过 .htaccess 来完成吗?

【问题讨论】:

另外,给自己一个meaningful username。这样做的一个好处是其他人可以使用 at-replies 在他们的 cmets 中与您联系,您会收到通知,说明有人在评论中与您联系。 感谢您的建议。我并不总是在这个网站上。我会努力改正我的错误:) 【参考方案1】:

这里没有提到,但FallbackResource 是处理未找到 (404) 网址的新推荐方式。示例:

FallbackResource /not-404.php 

来自 Apache 手册

使用它为不映射到文件系统中任何内容的任何 URL 设置处理程序,否则将返回 HTTP 404(未找到)。

【讨论】:

需要注意的是,我发现这可能会破坏一些服务器端处理的 REST 样式的 URL,例如:http://example.com/app.php/some/resource 这不正确。 FallbackResource 的行为将与 ErrorDocument 相同。如果启用了PATH_INFO,那么/app.php/some/resource 可以完美运行,并且我已经在我的 Apache 上对其进行了测试。【参考方案2】:

实施 404 错误规则。不需要 mod_rewrite:

ErrorDocument 404 /default.php

【讨论】:

如果你想使用 html5 后备而不像http://example.com/app.php/some/resource 那样搞乱对 php 的 rest 样式调用,这也很棒。 我实际上改用了这个,效果更好! 这可能不是你想要的。这会将 HTTP 404 状态(未找到文件)标头发送回浏览器(和 Google)。因此,仅将其用于有用的“未找到文件”页面。【参考方案3】:
RewriteEngine on
RewriteCond %REQUEST_FILENAME !-f
RewriteCond %REQUEST_FILENAME !-d
RewriteRule ^.*$ /default.php [L]

【讨论】:

以上是关于.htaccess url-rewrite 如果文件不存在的主要内容,如果未能解决你的问题,请参考以下文章

启用 .htaccess 时,ubuntu 返回 500 错误

Lambda@Edge 函数的 Node.Js 301 url-rewrite 问题

.htaccess使用URL中的#item重写站点以进行直接文件访问

php中的.htaccess伪静态

使用 htaccess 重定向子域而不更改地址栏中的 URL

.htaccess:FilterProvider 问题