2014-10-08 48 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