.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重写站点以进行直接文件访问