拒绝访问路径(提供403或404响应)

时间:2020-10-17 作者:Jim Worrall

我知道这应该很容易。BBpress在/论坛/用户/上创建用户配置文件。

我想让他们对任何人都不可用,并且不被谷歌索引。我已经尝试了以下(在.htaccess中)以及更多方法,但似乎没有任何效果。是不是因为这些不是真正的目录,只是BBpress创建的页面层次结构?解决方案是什么?

# RedirectMatch 404 ^/fora/users/.*$

# RedirectMatch 404 ^.*/users/.*$

# this give internal server error throughout site:
# <Files ~ "/users/">
# Header set X-Robots-Tag "noindex, nofollow"
# </FilesMatch>

# RewriteEngine on
# RewriteRule ^.*/users/.*$ - [F]

2 个回复
最合适的回答,由SO网友:MrWhite 整理而成

# this give internal server error throughout site:
<Files ~ "/users/">
Header set X-Robots-Tag "noindex, nofollow"
</FilesMatch>
这将给出一个;内部服务器错误;(500响应)因为您使用了</FilesMatch> 关闭<Files> 部分应该是这样的</Files>.

但正如你所建议的,这无论如何都行不通,因为<Files> 指令仅匹配真实文件,而不匹配虚拟URL路径。

但你不需要设置X-Robots-Tag 如果您只是想阻止(403禁止)请求。

RewriteEngine on
RewriteRule ^.*/users/.*$ - [F]
这应该起作用,以便发送;403禁止“;对包含/users/ 作为URL路径的一部分,如果您将其放置在.htaccess, 在WordPress代码块之前(即# BEGIN WordPress 第节)。

但是,您不需要重复RewriteEngine On 指令。以及RewriteRule <应修改em>模式,以避免匹配/users/ URL路径中的任何位置,否则,它可能会阻止有效的URL。

请在您的.htaccess 文件:

RewriteRule ^forums/users/ - [F]
这将阻止任何简单启动的请求/forums/users/.

注意,上没有斜杠前缀RewriteRule 图案

<小时/>UPDATE: 如果此操作失败,请确保您没有自定义403ErrorDocument 定义如果没有,那么这仍然可以在服务器配置中配置(由web主机),这是您无法控制的。但是,您仍然可以在.htaccess 文件:

ErrorDocument 403 default
一种让它转为404的方法。。。?我找不到重写规则的标志。

您可以使用R=404 标记而不是F 触发一个;404未找到“;回答虽然这看起来像一个;重定向“;,因为它使用R (redirect) 标志,它不是外部重定向(仅针对3xx响应代码触发)。

事实上,您可以使用R=403 而不是F 如果你想的话。F 只是一条捷径。

SO网友:GeorgeP

是的,这是一个非常永久的链接,为您的帖子/页面/CPT创建了重写规则,而不是一个真正的目录。

您可以添加nofollow 到使用特定php模板的页面(检查body class) 或转到CPT的存档页(如果users 是CPT),将其添加到函数中。php或(mu)插件:

add_action( \'wp_head\', function(){
    if( is_page_template(\'single-users.php\') || is_post_type_archive(\'users\') ) {
        echo \'<meta name="robots" content="noindex">\';
    }
} );
此外,您可以添加wp_redirect 发送到每个模板的顶部并发送到404页面,如下所示:

$url = get_template_part( 404 );
wp_redirect($url, 404);
或者,您可以使用Wordpress功能status_header() 添加HTTP/1.1 404 Not Found 收割台

function 404_my_event() {
  global $post;
  if ( is_singular( \'event\' ) && !rr_event_should_be_available( $post->ID ) ) {
    global $wp_query;
    $wp_query->set_404();
    status_header(404);
  }
}
add_action( \'wp\', \'404_my_event\' );
参考文献:

相关推荐

Understanding Redirects

我有一个WordPress网站,运行良好。该网站在一个流行的托管网站上共享托管。它已从不同的托管站点迁移/转移到当前的托管站点(提到这一点是因为它可能会在回答这两个问题时发挥作用)。该站点在现有站点上有一个SSL,在原始站点上也有一个SSL。我已经更改了域名注册处的名称服务器,以指向新的托管站点。当我使用sslchecker时。com/sslchecker要分析我的www域,我会发现以下信息:当我使用www.example.com 或https://www.example.com 分析器表示url解析为w