2014-10-08 18 views
0

有人可以指向我的htaccess規則,這將引發404錯誤的任何頁面,其中沒有規範標籤?如何向所有非規範網址啓動404?

我想過這樣的事情片斷可以達到(不知道,它是否是正確的,但看起來像它會):

function resolve_canonical($canonical,$location = "404"){ 
    $current_url= "http://".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']; 
    if($current_url !== $canonical){ 
     if($location == "404"){ 
      // header("location: http://".$_SERVER['HTTP_HOST']."/404"); 
      // header("HTTP/1.0 404 Not Found"); 
      readfile('404.php'); 
      exit();  
     }elseif($location == "redirect"){ 
      header("location: ".$canonical);   
      exit(); 
     } 
    } 
} 

謝謝!

回答

1

你不能只用.htaccess來做到這一點,你不能訪問php的變量。這個功能永遠不會開火。

一種可能性可能是一個GET參數,你可以在你的htaccess中使用它,但這並不容易。

你現在的做法很好,只需在代碼中儘早放置這些代碼即可,因此不會有不必要的代碼運行。


你的代碼可以得到更短的(可能過分了,但向你展示它可以做到):

function resolve_canonical($canonical,$location = "404"){ 
    if($canonical !== "http://".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']){ 
     if($location == "404"){   header("location: "/404", true, 404); } 
     elseif($location == "redirect"){ header("location: ".$canonical);  } 
     exit; 
    } 
} 
+0

謝謝馬亭!你能幫我修改這段代碼,將用戶重定向到規範的URL而不是404嗎? – 2014-10-08 12:01:26

+0

只是在我的示例短代碼中結合第一個和第二個標頭:) – Martijn 2014-10-08 12:09:22

+0

不知道我是否正確理解...如下所示:?function resolve_canonical($ canonical,$ location =「404」){if($ canonical!==如果($ location ==「404」){header(「location:」。$ canonical);} {$ _ SERVER ['HTTP_HOST']。$ _ SERVER ['REQUEST_URI']){ } exit; } } – 2014-10-08 12:22:54