将404网址转为搜索

时间:2015-06-11 15:09:29

标签: php .htaccess redirect search http-status-code-404

我想将所有404网址转换为搜索字符串。这可以通过将其添加到404.php:

轻松完成
$search_term = substr($_SERVER['REQUEST_URI'],1);
$search_404 = str_replace('/','+',$search_term);
$search_404 = str_replace('-','+',$search_404);
$location = "http://example.com/?s=" . $search_404;
session_start();
$_SESSION['search_404'] = true;
header("location: $location");

也应该有一些消毒,但现在不是重点。

我想要的是没有“?s =”,所以网址保持不变但搜索仍然有效。这可能/怎么样?

(我不太担心搜索引擎优化,因为页面没有索引,但我确实担心与现有页面或安全漏洞的潜在冲突)

更新:显然,如果wp本身在其他所有方法都失败时使用搜索作为最后的手段,即如果没有帖子,页面,类别,标签等给定网址,则应该很简单,启动搜索查询...有没有办法改变模板层次结构,以便将搜索放在最后?

1 个答案:

答案 0 :(得分:1)

好的,看起来这样做的一种方法是忽略搜索模板并改用404模板 - 就像这样:

$search_term = substr($_SERVER['REQUEST_URI'],1);
$search_404 = str_replace('/','+',$search_term);
$search_404 = str_replace('-','+',$search_404);
$args=array('s'      => $search_404, );
query_posts($args);
if(have_posts()) { while (have_posts()) : the_post(); 
// WHATEVER
endwhile; wp_reset_query(); }

现在这件事就完成了。

如果可能存在任何冲突或安全漏洞且页面仍然返回404,我仍然很好奇。