2011-03-29 78 views
27

我必须为网站做一点小技巧! 的理念是:.htaccess url-rewrite如果文件不存在

  • 如果然后所需的网址文件是否存在我去那个网址,什么都不做多;
  • 如果所需网址的文件不存在,我必须去一个file.php并且做一些事情,但不要改变网址!

例如:

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

www.mysite.com/page2.htm - >不存在 - >去文件default.php,但与URL“www.mysite.com/page2.htm”

这是可能的所有通过.htaccess?

+1

另外,给自己一个[有意义的用户名](http://tinyurl.com/so-hints)。对此的一个好处是其他人可以使用[at-replies](http://meta.stackexchange.com/questions/43019/how-do-comment-replies-work)在他们的评论中解决你的问题,你会得到一个通知有人在评论中提到你。 – outis 2011-06-08 04:59:40

+0

Thx的建议。我并不总是在这个网站。我会尝试纠正我的错误:) – Kiavor 2011-06-23 13:19:58

回答

60
RewriteEngine on 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^.*$ /default.php [L] 
5

执行404错误规则。不需要mod_rewrite的:

ErrorDocument 404 /default.php 
+0

如果您想使用HTML5后备,而不会像“http:// example.com/app.php/some/resource'那样搞乱PHP的休息风格调用,这也很棒。 – 2015-07-21 05:55:04

+0

我真的切换到这个,它工作得更好! – 2015-07-21 05:56:59

+0

这可能不是你想要的。这会将HTTP 404状态(文件未找到)标题发送回浏览器(以及Google)。 所以只能将它用于有用的'文件未找到'页面。 – 2017-02-27 09:53:14

8

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

FallbackResource /not-404.php 

Apache的手动

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

+0

需要注意的是,我发现这可能会破坏某些服务器端处理的REST风格的URL,如:http:// example.com/app.php/some/resource。 – 2015-07-25 00:28:33

+0

这是不正确的。 'FallbackResource'的行为将与'ErrorDocument'相同。如果启用了'PATH_INFO',那么'/ app.php/some/resource'完美地工作,我已经在我的Apache上进行了测试。 – anubhava 2015-07-25 07:29:49

+0

PATH_INFO在哪里启用? – 2015-08-06 05:49:42