2012-08-08 129 views
0

我有這個重寫規則:404頁時,沒有找到匹配

RewriteEngine on 
RewriteBase/

RewriteCond %{THE_REQUEST} \.php[\ /?].*HTTP/ [NC] 
RewriteRule ^.*$ - [R=404,L] 

RewriteRule ^(home|contact|about|submit|search)/?$ /index.php?page=$1 [L] 
RewriteRule ^([a-z]+)/([a-z0-9-]+)/?$ /index.php?page=home&cat=$1&slug=$2 [L] 
RewriteRule ^([a-z]+)/?$ /index.php?page=home&cat=$1 [L] 

我要的是:

  • 如果用戶鍵入的東西這是不匹配的最後三個條件我想展示404錯誤。目前它加載主頁。所以我在那裏檢查$_GET['page']。我不想檢查在PHP中。
  • 你有什麼可以改進我的重寫規則或任何補充?

請幫助

+0

重定向到一個404頁是一個非常不好的做法 – zerkms 2012-08-08 05:03:14

+0

你能指望的第一條規則呢? ('RewriteRule ^。* $ - [R = 404,L]'1) – 2012-08-08 05:03:48

回答

0

因爲一切最終路由到的index.php(前端控制器模式),我建議丟棄的mod_rewrite和使用:

FallbackResource /index.php 

然後解析URL爲index.php並相應地處理路由。

這需要一些重寫,但從長遠來看會更靈活。

查看更多about FallbackResourceFront-Controllers in PHP

+0

thanku。框架使用這種技術?請告訴我如何將網址發送到「index.php」,以便我可以在'parse_url()中使用它' – 2012-08-08 07:14:42

+0

是的。大多數框架使用FEC。 'FallbackResource/index.php'將發送任何沒有現有資源的請求給** index.php **。將它添加到**。htaccess **(或者vhost,如果可以的話)並刪除所有重寫行。 – 2012-08-08 13:43:55

+0

感謝。但告訴我它在哪裏(在$ _GET)? – 2012-08-23 13:24:48

0

您可以使用mod rewrite來爲您的網頁index.php添加參數,然後在php頁面中處理它們,可能會發回一個錯誤頁面(如cakePHP)。只保留一條規則。

RewriteRule ^([0-9A-Za-z]+)/?$ /index.php?argument=$1 [L] 
+0

thanku。你的意思是像一個前端控制器? – 2012-08-08 07:38:14

+0

是的,在MVC模型中,只有客戶端調用控制器。 – 2012-08-08 07:44:26

0

嘗試使用ErrorDocument白衣位置頁

ErrorDocument 404 /erreur_404.html 
+0

thanku。但我想在mod_rewrite中做。但我喜歡Jason的前臺控制器 – 2012-08-08 07:37:30