diff --git a/core/modules/block/src/Plugin/migrate/process/d6/BlockVisibility.php b/core/modules/block/src/Plugin/migrate/process/d6/BlockVisibility.php
index 9afd180..6e8fa3a 100644
--- a/core/modules/block/src/Plugin/migrate/process/d6/BlockVisibility.php
+++ b/core/modules/block/src/Plugin/migrate/process/d6/BlockVisibility.php
@@ -7,8 +7,10 @@
 
 namespace Drupal\block\Plugin\migrate\process\d6;
 
+use Drupal\Core\Extension\ModuleHandlerInterface;
 use Drupal\Core\Plugin\ContainerFactoryPluginInterface;
 use Drupal\migrate\MigrateExecutableInterface;
+use Drupal\migrate\MigrateSkipRowException;
 use Drupal\migrate\ProcessPluginBase;
 use Drupal\migrate\Row;
 use Drupal\migrate\Entity\MigrationInterface;
@@ -23,19 +25,34 @@
 class BlockVisibility extends ProcessPluginBase implements ContainerFactoryPluginInterface {
 
   /**
-   * The migration plugin.
+   * The migration.
+   *
+   * @var \Drupal\migrate\Entity\MigrationInterface
+   */
+  protected $migration;
+
+  /**
+   * The d6 user role migration plugin.
    *
    * @var \Drupal\migrate\Plugin\MigrateProcessInterface
    */
   protected $migrationPlugin;
 
   /**
+   * The module handler.
+   *
+   * @var \Drupal\Core\Extension\ModuleHandlerInterface
+   */
+  protected $moduleHandler;
+
+  /**
    * {@inheritdoc}
    */
-  public function __construct(array $configuration, $plugin_id, $plugin_definition, MigrationInterface $migration, MigrateProcessInterface $migration_plugin) {
+  public function __construct(array $configuration, $plugin_id, $plugin_definition, MigrationInterface $migration, MigrateProcessInterface $migration_plugin, ModuleHandlerInterface $module_handler) {
     parent::__construct($configuration, $plugin_id, $plugin_definition);
     $this->migration = $migration;
     $this->migrationPlugin = $migration_plugin;
+    $this->moduleHandler = $module_handler;
   }
 
   /**
@@ -47,7 +64,8 @@ public static function create(ContainerInterface $container, array $configuratio
       $plugin_id,
       $plugin_definition,
       $migration,
-      $container->get('plugin.manager.migrate.process')->createInstance('migration', array('migration' => 'd6_user_role'), $migration)
+      $container->get('plugin.manager.migrate.process')->createInstance('migration', array('migration' => 'd6_user_role'), $migration),
+      $container->get('module_handler')
     );
   }
   /**
@@ -60,9 +78,27 @@ public function transform($value, MigrateExecutableInterface $migrate_executable
     $visibility = array();
 
     if (!empty($pages)) {
-      $visibility['request_path']['pages'] = $pages;
       $visibility['request_path']['id'] = 'request_path';
       $visibility['request_path']['negate'] = !$old_visibility;
+
+      // If the visibility was using PHP code, handle it separately.
+      if ($old_visibility == 2) {
+        // If the PHP module is installed, migrate the old data directly.
+        if ($this->moduleHandler->moduleExists('php')) {
+          $visibility['request_path']['pages'] = $pages;
+        }
+        else {
+          throw new MigrateSkipRowException();
+        }
+      }
+      // For non-PHP code, ensure paths have leading slashes.
+      else {
+        $paths = preg_split("(\r\n?|\n)", $pages);
+        foreach ($paths as $key => $path) {
+          $paths[$key] = $path === '<front>' ? $path : '/' . ltrim($path, '/');
+        }
+        $visibility['request_path']['pages'] = implode("\n", $paths);
+      }
     }
 
     if (!empty($roles)) {
diff --git a/core/modules/block/src/Tests/Migrate/d6/MigrateBlockTest.php b/core/modules/block/src/Tests/Migrate/d6/MigrateBlockTest.php
index 49d40d7..b82e1b4 100644
--- a/core/modules/block/src/Tests/Migrate/d6/MigrateBlockTest.php
+++ b/core/modules/block/src/Tests/Migrate/d6/MigrateBlockTest.php
@@ -49,7 +49,7 @@ protected function setUp() {
       $entity->save();
     }
     $this->prepareMigrations(array(
-      'd6_custom_block'  => array(
+      'd6_custom_block' => array(
         array(array(1), array(1)),
         array(array(2), array(2)),
       ),
@@ -75,6 +75,31 @@ protected function setUp() {
   }
 
   /**
+   * Asserts various aspects of a block.
+   *
+   * @param string $id
+   *   The block ID.
+   * @param string $module
+   *   The module.
+   * @param array $visibility
+   *   The block visibility settings.
+   * @param string $region
+   *   The display region.
+   * @param string $theme
+   *   The theme.
+   * @param string $weight
+   *   The block weight.
+   */
+  public function assertEntity($id, $visibility, $region, $theme, $weight) {
+    $block = block::load($id);
+    $this->assertTrue($block Instanceof Block);
+    $this->assertIdentical($visibility, $block->getVisibility());
+    $this->assertIdentical($region, $block->getRegion());
+    $this->assertIdentical($theme, $block->getTheme());
+    $this->assertIdentical($weight, $block->getWeight());
+  }
+
+  /**
    * Test the block settings migration.
    */
   public function testBlockMigration() {
@@ -82,101 +107,67 @@ public function testBlockMigration() {
     $this->assertIdentical(count($blocks), 10);
 
     // User blocks
-    $test_block_user = $blocks['user'];
-    $this->assertNotNull($test_block_user);
-    $this->assertIdentical('sidebar_first', $test_block_user->getRegion());
-    $this->assertIdentical('bartik', $test_block_user->getTheme());
-    $visibility = $test_block_user->getVisibility();
-    $this->assertTrue(empty($visibility));
-    $this->assertIdentical(0, $test_block_user->getWeight());
-
-    $test_block_user_1 = $blocks['user_1'];
-    $this->assertNotNull($test_block_user_1);
-    $this->assertIdentical('sidebar_first', $test_block_user_1->getRegion());
-    $this->assertIdentical('bartik', $test_block_user_1->getTheme());
-    $visibility = $test_block_user_1->getVisibility();
-    $this->assertTrue(empty($visibility));
-    $this->assertIdentical(0, $test_block_user_1->getWeight());
-
-    $test_block_user_2 = $blocks['user_2'];
-    $this->assertNotNull($test_block_user_2);
-    $this->assertIdentical('sidebar_second', $test_block_user_2->getRegion());
-    $this->assertIdentical('bartik', $test_block_user_2->getTheme());
-    $visibility = $test_block_user_2->getVisibility();
-    $this->assertIdentical($visibility['user_role']['id'], 'user_role');
+    $visibility = array();
+    $visibility['request_path']['id'] = 'request_path';
+    $visibility['request_path']['pages'] = "<front>\n/node/1\n/blog/*";
+    $visibility['request_path']['negate'] = TRUE;
+
+    $this->assertEntity('user', $visibility, 'sidebar_first', 'bartik', 0);
+
+    $visibility = array();
+    $this->assertEntity('user_1', $visibility, 'sidebar_first', 'bartik', 0);
+
+    $visibility = array();
+    $visibility['user_role']['id'] = 'user_role';
     $roles = array();
     $roles['authenticated'] = 'authenticated';
-    $this->assertIdentical($visibility['user_role']['roles'], $roles);
-    $this->assertFalse($visibility['user_role']['negate']);
-    $this->assertIdentical(-9, $test_block_user_2->getWeight());
-
-    $test_block_user_3 = $blocks['user_3'];
-    $this->assertNotNull($test_block_user_3);
-    $this->assertIdentical('sidebar_second', $test_block_user_3->getRegion());
-    $this->assertIdentical('bartik', $test_block_user_3->getTheme());
-    $visibility = $test_block_user_3->getVisibility();
-    $this->assertIdentical($visibility['user_role']['id'], 'user_role');
+    $context_mapping['user'] = 'user.current_user';
+    $visibility['user_role']['roles'] = $roles;
+    $visibility['user_role']['context_mapping'] = $context_mapping;
+    $visibility['user_role']['negate'] = FALSE;
+    $this->assertEntity('user_2', $visibility, 'sidebar_second', 'bartik', -9);
+
+    $visibility = array();
+    $visibility['user_role']['id'] = 'user_role';
     $roles = array();
     $roles['migrate_test_role_1'] = 'migrate_test_role_1';
-    $this->assertIdentical($visibility['user_role']['roles'], $roles);
-    $this->assertFalse($visibility['user_role']['negate']);
-    $this->assertIdentical(-6, $test_block_user_3->getWeight());
+    $visibility['user_role']['roles'] = $roles;
+    $visibility['user_role']['context_mapping'] = $context_mapping;
+    $visibility['user_role']['negate'] = FALSE;
+    $this->assertEntity('user_3', $visibility, 'sidebar_second', 'bartik', -6);
 
     // Check system block
-    $test_block_system = $blocks['system'];
-    $this->assertNotNull($test_block_system);
-    $this->assertIdentical('footer', $test_block_system->getRegion());
-    $this->assertIdentical('bartik', $test_block_system->getTheme());
-    $visibility = $test_block_system->getVisibility();
-    $this->assertIdentical('request_path', $visibility['request_path']['id']);
-    $this->assertIdentical('node/1', $visibility['request_path']['pages']);
-    $this->assertTrue($visibility['request_path']['negate']);
-    $this->assertIdentical(-5, $test_block_system->getWeight());
+    $visibility = array();
+    $visibility['request_path']['id'] = 'request_path';
+    $visibility['request_path']['pages'] = '/node/1';
+    $visibility['request_path']['negate'] = TRUE;
+    $this->assertEntity('system', $visibility, 'footer', 'bartik', -5);
 
     // Check menu blocks
-    $test_block_menu = $blocks['menu'];
-    $this->assertNotNull($test_block_menu);
-    $this->assertIdentical('header', $test_block_menu->getRegion());
-    $this->assertIdentical('bartik', $test_block_menu->getTheme());
-    $visibility = $test_block_menu->getVisibility();
-    $this->assertTrue(empty($visibility));
-    $this->assertIdentical(-5, $test_block_menu->getWeight());
+    $visibility = array();
+    $this->assertEntity('menu', $visibility, 'header', 'bartik', -5);
 
     // Check custom blocks
-    $test_block_block = $blocks['block'];
-    $this->assertNotNull($test_block_block);
-    $this->assertIdentical('content', $test_block_block->getRegion());
-    $this->assertIdentical('bartik', $test_block_block->getTheme());
-    $visibility = $test_block_block->getVisibility();
-    $this->assertIdentical('request_path', $visibility['request_path']['id']);
-    $this->assertIdentical('<front>', $visibility['request_path']['pages']);
-    $this->assertFalse($visibility['request_path']['negate']);
-    $this->assertIdentical(0, $test_block_block->getWeight());
-
-    $test_block_block_1 = $blocks['block_1'];
-    $this->assertNotNull($test_block_block_1);
-    $this->assertIdentical('right', $test_block_block_1->getRegion());
-    $this->assertIdentical('bluemarine', $test_block_block_1->getTheme());
-    $visibility = $test_block_block_1->getVisibility();
-    $this->assertIdentical('request_path', $visibility['request_path']['id']);
-    $this->assertIdentical('node', $visibility['request_path']['pages']);
-    $this->assertFalse($visibility['request_path']['negate']);
-    $this->assertIdentical(-4, $test_block_block_1->getWeight());
-
-    $test_block_block_2 = $blocks['block_2'];
-    $this->assertNotNull($test_block_block_2);
-    $this->assertIdentical('right', $test_block_block_2->getRegion());
-    $this->assertIdentical('test_theme', $test_block_block_2->getTheme());
-    $visibility = $test_block_block_2->getVisibility();
-    $this->assertTrue(empty($visibility));
-    $this->assertIdentical(-7, $test_block_block_2->getWeight());
-
-    $test_block_block_3 = $blocks['block_3'];
-    $this->assertNotNull($test_block_block_3);
-    $this->assertIdentical('left', $test_block_block_3->getRegion());
-    $this->assertIdentical('test_theme', $test_block_block_3->getTheme());
-    $visibility = $test_block_block_3->getVisibility();
-    $this->assertTrue(empty($visibility));
-    $this->assertIdentical(-2, $test_block_block_3->getWeight());
+    $visibility = array();
+    $visibility['request_path']['id'] = 'request_path';
+    $visibility['request_path']['pages'] = '<front>';
+    $visibility['request_path']['negate'] = FALSE;
+    $this->assertEntity('block', $visibility, 'content', 'bartik', 0);
+
+    $visibility = array();
+    $visibility['request_path']['id'] = 'request_path';
+    $visibility['request_path']['pages'] = '/node';
+    $visibility['request_path']['negate'] = FALSE;
+    $this->assertEntity('block_1', $visibility, 'right', 'bluemarine', -4);
+
+    $visibility = array();
+    $this->assertEntity('block_2', $visibility, 'right', 'test_theme', -7);
+
+    $visibility = array();
+    $visibility['request_path']['id'] = 'request_path';
+    $visibility['request_path']['pages'] = "<?php\nreturn TRUE;";
+    $visibility['request_path']['negate'] = FALSE;
+    $this->assertEntity('block_3', $visibility, 'left', 'test_theme', -2);
   }
+
 }
diff --git a/core/modules/migrate_drupal/src/Tests/Table/d6/Blocks.php b/core/modules/migrate_drupal/src/Tests/Table/d6/Blocks.php
index ca9d72c..16f8f2e 100644
--- a/core/modules/migrate_drupal/src/Tests/Table/d6/Blocks.php
+++ b/core/modules/migrate_drupal/src/Tests/Table/d6/Blocks.php
@@ -130,7 +130,7 @@ public function load() {
       'custom' => '0',
       'throttle' => '0',
       'visibility' => '0',
-      'pages' => '',
+      'pages' => "<front>\r\nnode/1\nblog/*",
       'title' => '',
       'cache' => '-1',
     ))->values(array(
@@ -297,8 +297,8 @@ public function load() {
       'region' => 'left',
       'custom' => '0',
       'throttle' => '0',
-      'visibility' => '0',
-      'pages' => '',
+      'visibility' => '2',
+      'pages' => "<?php\nreturn TRUE;",
       'title' => '',
       'cache' => '-1',
     ))->values(array(
@@ -403,4 +403,4 @@ public function load() {
   }
 
 }
-#aecc8e1067d73824c43bfaf26f9ebf8c
+#471b4ac718c0db89c0f48f4051b2583d
