2011-03-29 80 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