【问题标题】:Turn 404 url into search将 404 url​​ 转为搜索
【发布时间】:2015-06-13 06:06:11
【问题描述】:

我想将所有 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 =”,因此网址保持不变,但搜索仍然有效。这可能/如何?

(我不太担心 SEO,因为这些页面无论如何都没有索引,但我确实担心与现有页面的潜在冲突或安全漏洞)

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

【问题讨论】:

  • ... 只需执行 htaccess 404 重定向
  • 确实尝试过,但它最终进入了重定向循环。这是我使用的代码:RewriteCond %{QUERY_STRING} \\?s=([^&]+) [NC] RewriteRule ^$ /%1/? [NC,R,L]

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


【解决方案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。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多