diff --git a/core/modules/block/js/block.es6.js b/core/modules/block/js/block.es6.js
index 68af99546b..2421444217 100644
--- a/core/modules/block/js/block.es6.js
+++ b/core/modules/block/js/block.es6.js
@@ -46,7 +46,7 @@
       }
 
       $(
-        '[data-drupal-selector="edit-visibility-node-type"], [data-drupal-selector="edit-visibility-language"], [data-drupal-selector="edit-visibility-user-role"]',
+        '[data-drupal-selector="edit-visibility-node-type"], [data-drupal-selector="edit-visibility-language"], [data-drupal-selector="edit-visibility-user-role"], [data-drupal-selector="edit-visibility-status-code"]',
       ).drupalSetSummary(checkboxesSummary);
 
       $(
diff --git a/core/modules/block/js/block.js b/core/modules/block/js/block.js
index 9612dfdbf3..208a1b27c4 100644
--- a/core/modules/block/js/block.js
+++ b/core/modules/block/js/block.js
@@ -25,7 +25,7 @@
         return vals.join(', ');
       }
 
-      $('[data-drupal-selector="edit-visibility-node-type"], [data-drupal-selector="edit-visibility-language"], [data-drupal-selector="edit-visibility-user-role"]').drupalSetSummary(checkboxesSummary);
+      $('[data-drupal-selector="edit-visibility-node-type"], [data-drupal-selector="edit-visibility-language"], [data-drupal-selector="edit-visibility-user-role"], [data-drupal-selector="edit-visibility-status-code"]').drupalSetSummary(checkboxesSummary);
 
       $('[data-drupal-selector="edit-visibility-request-path"]').drupalSetSummary(function (context) {
         var $pages = $(context).find('textarea[name="visibility[request_path][pages]"]');
diff --git a/core/modules/block/src/BlockForm.php b/core/modules/block/src/BlockForm.php
index 5624fc577e..0c3ca4a955 100644
--- a/core/modules/block/src/BlockForm.php
+++ b/core/modules/block/src/BlockForm.php
@@ -286,6 +286,10 @@ protected function buildVisibilityInterface(array $form, FormStateInterface $for
       $form['language']['negate']['#type'] = 'value';
       $form['language']['negate']['#value'] = $form['language']['negate']['#default_value'];
     }
+    if (isset($form['status_code'])) {
+      $form['status_code']['negate']['#type'] = 'value';
+      $form['status_code']['negate']['#value'] = $form['status_code']['negate']['#default_value'];
+    }
     return $form;
   }
 
diff --git a/core/modules/system/src/Plugin/Condition/StatusCode.php b/core/modules/system/src/Plugin/Condition/StatusCode.php
index e69de29bb2..6f0dbc77a6 100644
--- a/core/modules/system/src/Plugin/Condition/StatusCode.php
+++ b/core/modules/system/src/Plugin/Condition/StatusCode.php
@@ -0,0 +1,121 @@
+<?php
+
+namespace Drupal\system\Plugin\Condition;
+
+use Drupal\Core\Condition\ConditionPluginBase;
+use Drupal\Core\Form\FormStateInterface;
+use Drupal\Core\Plugin\ContainerFactoryPluginInterface;
+use Symfony\Component\DependencyInjection\ContainerInterface;
+use Symfony\Component\HttpFoundation\RequestStack;
+use Symfony\Component\HttpKernel\Exception\HttpExceptionInterface;
+
+/**
+ * Provides a 'Status code' condition.
+ *
+ * @Condition(
+ *   id = "status_code",
+ *   label = @Translation("Status codes"),
+ * )
+ */
+class StatusCode extends ConditionPluginBase implements ContainerFactoryPluginInterface {
+
+  /**
+   * The request stack.
+   *
+   * @var \Symfony\Component\HttpFoundation\RequestStack
+   */
+  protected $requestStack;
+
+  /**
+   * Constructs a Page not found condition plugin.
+   *
+   * @param \Symfony\Component\HttpFoundation\RequestStack $request_stack
+   *   The request stack.
+   * @param array $configuration
+   *   A configuration array containing information about the plugin instance.
+   * @param string $plugin_id
+   *   The plugin_id for the plugin instance.
+   * @param array $plugin_definition
+   *   The plugin implementation definition.
+   */
+  public function __construct(RequestStack $request_stack, array $configuration, $plugin_id, array $plugin_definition) {
+    parent::__construct($configuration, $plugin_id, $plugin_definition);
+    $this->requestStack = $request_stack;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) {
+    return new static(
+      $container->get('request_stack'),
+      $configuration,
+      $plugin_id,
+      $plugin_definition);
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function defaultConfiguration() {
+    return ['status_codes' => []] + parent::defaultConfiguration();
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function buildConfigurationForm(array $form, FormStateInterface $form_state) {
+    $status_codes = ['200', '403', '404'];
+    $form['status_codes'] = [
+      '#type'          => 'checkboxes',
+      '#title'         => $this->t('Show on status code'),
+      '#options'       => array_combine($status_codes, $status_codes),
+      '#default_value' => $this->configuration['status_codes'],
+      '#description'   => $this->t('Select status codes to enforce. If none are selected, all status codes will be allowed.'),
+    ];
+    return parent::buildConfigurationForm($form, $form_state);
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function submitConfigurationForm(array &$form, FormStateInterface $form_state) {
+    $this->configuration['status_codes'] = array_filter($form_state->getValue('status_codes'));
+    parent::submitConfigurationForm($form, $form_state);
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function summary() {
+    $config = $this->configuration['status_codes'];
+    $status_codes = ['200', '403', '404'];
+    $result = empty($config) ? $status_codes : $config;
+    $codes = implode(', ', $result);
+    if (!empty($this->configuration['negate'])) {
+      return $this->t('Do not return true on the following status code(s): @codes', ['@codes' => $codes]);
+    }
+    return $this->t('Return true on the following status code(s): @codes', ['@codes' => $codes]);
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function evaluate() {
+    if (empty($this->configuration['status_codes']) && !$this->isNegated()) {
+      return TRUE;
+    }
+    $status = $this->requestStack->getCurrentRequest()->attributes->get('exception');
+    return ($status instanceof HttpExceptionInterface && in_array($status->getStatusCode(), $this->configuration['status_codes']));
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getCacheContexts() {
+    $contexts = parent::getCacheContexts();
+    $contexts[] = 'url.path';
+    return $contexts;
+  }
+
+}
