【问题标题】:Want to throw 404 Errors when URL contains a certain string - Wordpress当 URL 包含某个字符串时想要抛出 404 错误 - Wordpress
【发布时间】:2011-03-14 08:36:05
【问题描述】:

我正在管理一个 wordpress 博客,并且想在 url 包含字符串模式时抛出 404 错误(例如:如果 url 包含“thisisnotwanted”)。我在想我可以在 htaccess 文件中添加一些内容,例如:重定向“thisisnotwanted”404

有人可以帮忙吗?我只是不想让 Google 用这个参数来索引页面。

【问题讨论】:

  • 你找到解决方案了吗?

标签: php wordpress .htaccess


【解决方案1】:

如果您想禁止 Google 将网页编入索引,您应该在您网站的根文件夹中添加一个 robots.txt 文件。

然后你可以在文件中加入这样的内容:

User-agent: *
Disallow: /thisisnotwanted

我假设您想禁止所有搜索引擎的页面,但如果您只想禁止 Google,则应将第一行更改为 User-agent: Google

您可以使用Webmaster tools 明确告诉 Google 删除链接。 Google 可能需要几天时间才会接受您的请求并将这些网页从其索引中删除。

欲了解更多信息,请访问此网站:
The Web Robots Pages

【讨论】:

  • 谢谢大家的回答。我确实在 robots.txt 中有那个条目。但不知何故,谷歌并没有将它们从索引中删除。我想知道抛出 404 是否有助于将这 2000 多个页面从谷歌抓取的索引中取出(由于我使用了一些插件)。再次感谢您的建议。如果您有其他建议,请告诉我。谢谢。
【解决方案2】:

这可以使用 robots.txt 来实现,但由于您在此处询问如何手动抛出 404 页面:

<?php
if ( preg_match('/thisisnotwanted/i',$_SERVER["REQUEST_URI"]) ) {
    header("HTTP/1.0 404 Not Found - Archive Empty");
    require TEMPLATEPATH.'/404.php';
    exit;
}
get_header();
?>

这段代码只是一个关于如何显示 404 页面的示例,它不应该在“生产”中使用,而是按照 Michiel Pater 的建议使用 robots.txt。

【讨论】:

  • 感谢各位的回答。我已经在 robots.txt 文件中有这个模式。不知何故,这些页面仍然显示在索引中。由于很难手动输入网站管理员工具(因为它们不在一个目录中,所以要删除它们)我想我可以抛出 404 并更快地删除它们。
  • @Sameer:没错。 Google 不会立即从索引中删除这些页面。嗯,这解释了很多。您应该将此信息添加到您的答案中。也尝试使用@poelinca 的代码。
  • 使用这段代码会在用户请求页面时显示 404 页面,它不会测试该页面是否是由 google 请求的,因此由于没有人可以访问该页面/帖子从 wp-admin 不再公开页面/帖子会更容易。如果您需要向普通用户显示页面并且不被索引,那么您唯一的选择是使用 robots.txt 并等到谷歌从他们的索引中删除页面/帖子,同时确保帖子/页面不在里面您在谷歌网站管理员工具中上传的 xml。
  • 发生的事情是当有人想回复任何人的 cmets 时,我使用了一个评论插件,该插件将“replytocom”作为参数传递。这个链接也被 Goog 捡到了。网站上所有包含 cmets 的页面都被复制了与页面上的 cmets 一样多的次数。例如:如果我的页面是 mysite.com/category/file1.html - 并且有 20 个 cmets。除了这篇文章,我还有 20 个文件,例如 mysite.com/category/file1.html?replytocom=1234mysite.com/category/file1.html?replytocom=12345 等。其中“12345”等是 cmets id。
【解决方案3】:

您可以在主题文件中设置条件语句,将查看者重定向到 404 页面。


使用此代码:

$wp_url = $_SERVER["REQUEST_URI"] //from poelinca
if(preg_match('/thisisnotwanted/',$wp_url)) header('location:/404page');

【讨论】:

  • get_bloginfo('url' / 'home') - 返回在“设置”>“常规”中设置的“站点地址 (URI)”。此数据是从“??????”记录在 wp_options 表中。考虑改用 home_url()。而且它没有得到请求的 url 而是主页 url 。在您发布答案之前请小心。
  • 您正在将用户重定向到 404 错误页面。这是不好的做法。最好使用像 @poelinca 这样的 404 标头。
  • 你仍然没有明白我的意思,get_bloginfo('url') 或 home_url() 或 get_blobinfo('home') 在每个页面上都返回相同的链接,比如我请求 www.example。 com/category/post_name, home_url 将返回 www.example.com 并且为了测试不需要的字符串,我需要 category/post_name 来代替。
  • @poelinca:我确实明白了。只是犯了一个错误而已。
【解决方案4】:

使用 mod_rewrite,会是这样的

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

在 .htaccess 中

【讨论】:

  • @Michiel:我不知道,但我不明白为什么它不起作用。除非 wordpress 在自行生成的链接中使用 thisisnotwanted(这会使该链接失效)。
  • 我认为 Wordpress 也将 RewriteEngine 用于它自己的配置。如果是这种情况,那么您将需要找到一种方法来合并这两种配置。不过这是个好主意。
  • @Michiel:哦!我在我的安装中没有看到它(.htaccess 中的 WordPress“部分”是空的)-我猜是因为我禁用了“漂亮的永久链接”。好吧,我会尝试在 # END WordPress 之后添加规则。
猜你喜欢
  • 1970-01-01
  • 2012-06-11
  • 2017-12-19
  • 2017-07-11
  • 2021-10-18
  • 2022-01-15
  • 2017-06-06
  • 1970-01-01
  • 2019-10-17
相关资源
最近更新 更多