diff --git a/rules_path_alias/README.txt b/rules_path_alias/README.txt
new file mode 100644
index 0000000..683e730
--- /dev/null
+++ b/rules_path_alias/README.txt
@@ -0,0 +1,14 @@
+The 'Rules Path Alias' module provides Rules support on behalf of the core
+Drupal Path Alias module. This functionality can't be included in the main Rules
+module because it depends on the Path Alias module being enabled.
+
+This module provides the following:
+
+  1) Conditions:
+       PathAliasExists (rules_path_alias_exists)
+       PathHasAlias (rules_path_has_alias)
+
+  2) Actions:
+       PathAliasCreate (rules_path_alias_create)
+       PathAliasDeleteByAlias (rules_path_alias_delete_by_alias)
+       PathAliasDeleteByPath (rules_path_alias_delete_by_path)
diff --git a/rules_path_alias/rules_path_alias.info.yml b/rules_path_alias/rules_path_alias.info.yml
new file mode 100644
index 0000000..51fcb3b
--- /dev/null
+++ b/rules_path_alias/rules_path_alias.info.yml
@@ -0,0 +1,8 @@
+name: Rules Path Alias
+type: module
+description: 'Provides Rules conditions and actions on behalf of the core Path Alias module.'
+package: Rules
+core: 8.x
+core_version_requirement: ^8 || ^9
+dependencies:
+  - rules:rules
diff --git a/src/Plugin/Condition/PathAliasExists.php b/rules_path_alias/src/Plugin/Condition/PathAliasExists.php
similarity index 98%
rename from src/Plugin/Condition/PathAliasExists.php
rename to rules_path_alias/src/Plugin/Condition/PathAliasExists.php
index 4d91225..cae1567 100644
--- a/src/Plugin/Condition/PathAliasExists.php
+++ b/rules_path_alias/src/Plugin/Condition/PathAliasExists.php
@@ -1,6 +1,6 @@
 <?php
 
-namespace Drupal\rules\Plugin\Condition;
+namespace Drupal\rules_path_alias\Plugin\Condition;
 
 use Drupal\Core\Language\LanguageInterface;
 use Drupal\Core\Path\AliasManagerInterface;
diff --git a/src/Plugin/Condition/PathHasAlias.php b/rules_path_alias/src/Plugin/Condition/PathHasAlias.php
similarity index 98%
rename from src/Plugin/Condition/PathHasAlias.php
rename to rules_path_alias/src/Plugin/Condition/PathHasAlias.php
index bac6ec5..8460f35 100644
--- a/src/Plugin/Condition/PathHasAlias.php
+++ b/rules_path_alias/src/Plugin/Condition/PathHasAlias.php
@@ -1,6 +1,6 @@
 <?php
 
-namespace Drupal\rules\Plugin\Condition;
+namespace Drupal\rules_path_alias\Plugin\Condition;
 
 use Drupal\Core\Language\LanguageInterface;
 use Drupal\Core\Path\AliasManagerInterface;
diff --git a/src/Plugin/RulesAction/EntityPathAliasCreate.php b/rules_path_alias/src/Plugin/RulesAction/EntityPathAliasCreate.php
similarity index 94%
rename from src/Plugin/RulesAction/EntityPathAliasCreate.php
rename to rules_path_alias/src/Plugin/RulesAction/EntityPathAliasCreate.php
index a24e694..7d07fdc 100644
--- a/src/Plugin/RulesAction/EntityPathAliasCreate.php
+++ b/rules_path_alias/src/Plugin/RulesAction/EntityPathAliasCreate.php
@@ -1,6 +1,6 @@
 <?php
 
-namespace Drupal\rules\Plugin\RulesAction;
+namespace Drupal\rules_path_alias\Plugin\RulesAction;
 
 use Drupal\Core\Path\AliasStorageInterface;
 use Drupal\Core\Entity\EntityInterface;
@@ -13,7 +13,7 @@ use Symfony\Component\DependencyInjection\ContainerInterface;
  *
  * @RulesAction(
  *   id = "rules_entity_path_alias_create",
- *   deriver = "Drupal\rules\Plugin\RulesAction\EntityPathAliasCreateDeriver"
+ *   deriver = "Drupal\rules_path_alias\Plugin\RulesAction\EntityPathAliasCreateDeriver"
  * )
  *
  * @todo Add access callback information from Drupal 7.
diff --git a/src/Plugin/RulesAction/EntityPathAliasCreateDeriver.php b/rules_path_alias/src/Plugin/RulesAction/EntityPathAliasCreateDeriver.php
similarity index 95%
rename from src/Plugin/RulesAction/EntityPathAliasCreateDeriver.php
rename to rules_path_alias/src/Plugin/RulesAction/EntityPathAliasCreateDeriver.php
index 6de9fec..b9b6408 100644
--- a/src/Plugin/RulesAction/EntityPathAliasCreateDeriver.php
+++ b/rules_path_alias/src/Plugin/RulesAction/EntityPathAliasCreateDeriver.php
@@ -1,6 +1,6 @@
 <?php
 
-namespace Drupal\rules\Plugin\RulesAction;
+namespace Drupal\rules_path_alias\Plugin\RulesAction;
 
 use Drupal\Component\Plugin\Derivative\DeriverBase;
 use Drupal\Core\Entity\ContentEntityTypeInterface;
@@ -14,7 +14,7 @@ use Symfony\Component\DependencyInjection\ContainerInterface;
 /**
  * Derives entity create plugin definitions based on content entity types.
  *
- * @see \Drupal\rules\Plugin\RulesAction\EntityPathAliasCreate
+ * @see \Drupal\rules_path_alias\Plugin\RulesAction\EntityPathAliasCreate
  */
 class EntityPathAliasCreateDeriver extends DeriverBase implements ContainerDeriverInterface {
   use StringTranslationTrait;
diff --git a/src/Plugin/RulesAction/PathAliasCreate.php b/rules_path_alias/src/Plugin/RulesAction/PathAliasCreate.php
similarity index 98%
rename from src/Plugin/RulesAction/PathAliasCreate.php
rename to rules_path_alias/src/Plugin/RulesAction/PathAliasCreate.php
index 7e74c66..f21d59b 100644
--- a/src/Plugin/RulesAction/PathAliasCreate.php
+++ b/rules_path_alias/src/Plugin/RulesAction/PathAliasCreate.php
@@ -1,6 +1,6 @@
 <?php
 
-namespace Drupal\rules\Plugin\RulesAction;
+namespace Drupal\rules_path_alias\Plugin\RulesAction;
 
 use Drupal\Core\Language\LanguageInterface;
 use Drupal\Core\Path\AliasStorageInterface;
diff --git a/src/Plugin/RulesAction/PathAliasDeleteByAlias.php b/rules_path_alias/src/Plugin/RulesAction/PathAliasDeleteByAlias.php
similarity index 97%
rename from src/Plugin/RulesAction/PathAliasDeleteByAlias.php
rename to rules_path_alias/src/Plugin/RulesAction/PathAliasDeleteByAlias.php
index 007310e..929d71e 100644
--- a/src/Plugin/RulesAction/PathAliasDeleteByAlias.php
+++ b/rules_path_alias/src/Plugin/RulesAction/PathAliasDeleteByAlias.php
@@ -1,6 +1,6 @@
 <?php
 
-namespace Drupal\rules\Plugin\RulesAction;
+namespace Drupal\rules_path_alias\Plugin\RulesAction;
 
 use Drupal\Core\Path\AliasStorageInterface;
 use Drupal\Core\Plugin\ContainerFactoryPluginInterface;
diff --git a/src/Plugin/RulesAction/PathAliasDeleteByPath.php b/rules_path_alias/src/Plugin/RulesAction/PathAliasDeleteByPath.php
similarity index 97%
rename from src/Plugin/RulesAction/PathAliasDeleteByPath.php
rename to rules_path_alias/src/Plugin/RulesAction/PathAliasDeleteByPath.php
index d1aacf0..0ba15ed 100644
--- a/src/Plugin/RulesAction/PathAliasDeleteByPath.php
+++ b/rules_path_alias/src/Plugin/RulesAction/PathAliasDeleteByPath.php
@@ -1,6 +1,6 @@
 <?php
 
-namespace Drupal\rules\Plugin\RulesAction;
+namespace Drupal\rules_path_alias\Plugin\RulesAction;
 
 use Drupal\Core\Path\AliasStorageInterface;
 use Drupal\Core\Plugin\ContainerFactoryPluginInterface;
diff --git a/tests/src/Unit/Integration/Condition/PathAliasExistsTest.php b/rules_path_alias/tests/src/Unit/Integration/Condition/PathAliasExistsTest.php
similarity index 95%
rename from tests/src/Unit/Integration/Condition/PathAliasExistsTest.php
rename to rules_path_alias/tests/src/Unit/Integration/Condition/PathAliasExistsTest.php
index ac6ade5..f42d464 100644
--- a/tests/src/Unit/Integration/Condition/PathAliasExistsTest.php
+++ b/rules_path_alias/tests/src/Unit/Integration/Condition/PathAliasExistsTest.php
@@ -1,12 +1,12 @@
 <?php
 
-namespace Drupal\Tests\rules\Unit\Integration\Condition;
+namespace Drupal\Tests\rules_path_alias\Unit\Integration\Condition;
 
 use Drupal\Core\Language\LanguageInterface;
 use Drupal\Tests\rules\Unit\Integration\RulesIntegrationTestBase;
 
 /**
- * @coversDefaultClass \Drupal\rules\Plugin\Condition\PathAliasExists
+ * @coversDefaultClass \Drupal\rules_path_alias\Plugin\Condition\PathAliasExists
  * @group RulesCondition
  */
 class PathAliasExistsTest extends RulesIntegrationTestBase {
diff --git a/tests/src/Unit/Integration/Condition/PathHasAliasTest.php b/rules_path_alias/tests/src/Unit/Integration/Condition/PathHasAliasTest.php
similarity index 95%
rename from tests/src/Unit/Integration/Condition/PathHasAliasTest.php
rename to rules_path_alias/tests/src/Unit/Integration/Condition/PathHasAliasTest.php
index 7408228..016cd04 100644
--- a/tests/src/Unit/Integration/Condition/PathHasAliasTest.php
+++ b/rules_path_alias/tests/src/Unit/Integration/Condition/PathHasAliasTest.php
@@ -1,12 +1,12 @@
 <?php
 
-namespace Drupal\Tests\rules\Unit\Integration\Condition;
+namespace Drupal\Tests\rules_path_alias\Unit\Integration\Condition;
 
 use Drupal\Core\Language\LanguageInterface;
 use Drupal\Tests\rules\Unit\Integration\RulesIntegrationTestBase;
 
 /**
- * @coversDefaultClass \Drupal\rules\Plugin\Condition\PathHasAlias
+ * @coversDefaultClass \Drupal\rules_path_alias\Plugin\Condition\PathHasAlias
  * @group RulesCondition
  */
 class PathHasAliasTest extends RulesIntegrationTestBase {
diff --git a/tests/src/Unit/Integration/RulesAction/EntityPathAliasCreateTest.php b/rules_path_alias/tests/src/Unit/Integration/RulesAction/EntityPathAliasCreateTest.php
similarity index 95%
rename from tests/src/Unit/Integration/RulesAction/EntityPathAliasCreateTest.php
rename to rules_path_alias/tests/src/Unit/Integration/RulesAction/EntityPathAliasCreateTest.php
index 8bf42a1..41ecfa5 100644
--- a/tests/src/Unit/Integration/RulesAction/EntityPathAliasCreateTest.php
+++ b/rules_path_alias/tests/src/Unit/Integration/RulesAction/EntityPathAliasCreateTest.php
@@ -1,6 +1,6 @@
 <?php
 
-namespace Drupal\Tests\rules\Unit\Integration\RulesAction;
+namespace Drupal\Tests\rules_path_alias\Unit\Integration\RulesAction;
 
 use Drupal\Core\Entity\EntityInterface;
 use Drupal\Core\Path\AliasStorageInterface;
@@ -9,7 +9,7 @@ use Drupal\Tests\rules\Unit\Integration\RulesEntityIntegrationTestBase;
 use Prophecy\Argument;
 
 /**
- * @coversDefaultClass \Drupal\rules\Plugin\RulesAction\EntityPathAliasCreate
+ * @coversDefaultClass \Drupal\rules_path_alias\Plugin\RulesAction\EntityPathAliasCreate
  * @group RulesAction
  */
 class EntityPathAliasCreateTest extends RulesEntityIntegrationTestBase {
diff --git a/tests/src/Unit/Integration/RulesAction/PathAliasCreateTest.php b/rules_path_alias/tests/src/Unit/Integration/RulesAction/PathAliasCreateTest.php
similarity index 92%
rename from tests/src/Unit/Integration/RulesAction/PathAliasCreateTest.php
rename to rules_path_alias/tests/src/Unit/Integration/RulesAction/PathAliasCreateTest.php
index 6f8c23e..30f9061 100644
--- a/tests/src/Unit/Integration/RulesAction/PathAliasCreateTest.php
+++ b/rules_path_alias/tests/src/Unit/Integration/RulesAction/PathAliasCreateTest.php
@@ -1,13 +1,13 @@
 <?php
 
-namespace Drupal\Tests\rules\Unit\Integration\RulesAction;
+namespace Drupal\Tests\rules_path_alias\Unit\Integration\RulesAction;
 
 use Drupal\Core\Language\LanguageInterface;
 use Drupal\Core\Path\AliasStorageInterface;
 use Drupal\Tests\rules\Unit\Integration\RulesIntegrationTestBase;
 
 /**
- * @coversDefaultClass \Drupal\rules\Plugin\RulesAction\PathAliasCreate
+ * @coversDefaultClass \Drupal\rules_path_alias\Plugin\RulesAction\PathAliasCreate
  * @group RulesAction
  */
 class PathAliasCreateTest extends RulesIntegrationTestBase {
diff --git a/tests/src/Unit/Integration/RulesAction/PathAliasDeleteByAliasTest.php b/rules_path_alias/tests/src/Unit/Integration/RulesAction/PathAliasDeleteByAliasTest.php
similarity index 89%
rename from tests/src/Unit/Integration/RulesAction/PathAliasDeleteByAliasTest.php
rename to rules_path_alias/tests/src/Unit/Integration/RulesAction/PathAliasDeleteByAliasTest.php
index aa8d06e..bbc6a48 100644
--- a/tests/src/Unit/Integration/RulesAction/PathAliasDeleteByAliasTest.php
+++ b/rules_path_alias/tests/src/Unit/Integration/RulesAction/PathAliasDeleteByAliasTest.php
@@ -1,12 +1,12 @@
 <?php
 
-namespace Drupal\Tests\rules\Unit\Integration\RulesAction;
+namespace Drupal\Tests\rules_path_alias\Unit\Integration\RulesAction;
 
 use Drupal\Core\Path\AliasStorageInterface;
 use Drupal\Tests\rules\Unit\Integration\RulesIntegrationTestBase;
 
 /**
- * @coversDefaultClass \Drupal\rules\Plugin\RulesAction\PathAliasDeleteByAlias
+ * @coversDefaultClass \Drupal\rules_path_alias\Plugin\RulesAction\PathAliasDeleteByAlias
  * @group RulesAction
  */
 class PathAliasDeleteByAliasTest extends RulesIntegrationTestBase {
diff --git a/tests/src/Unit/Integration/RulesAction/PathAliasDeleteByPathTest.php b/rules_path_alias/tests/src/Unit/Integration/RulesAction/PathAliasDeleteByPathTest.php
similarity index 89%
rename from tests/src/Unit/Integration/RulesAction/PathAliasDeleteByPathTest.php
rename to rules_path_alias/tests/src/Unit/Integration/RulesAction/PathAliasDeleteByPathTest.php
index 39e763d..82e4e03 100644
--- a/tests/src/Unit/Integration/RulesAction/PathAliasDeleteByPathTest.php
+++ b/rules_path_alias/tests/src/Unit/Integration/RulesAction/PathAliasDeleteByPathTest.php
@@ -1,12 +1,12 @@
 <?php
 
-namespace Drupal\Tests\rules\Unit\Integration\RulesAction;
+namespace Drupal\Tests\rules_path_alias\Unit\Integration\RulesAction;
 
 use Drupal\Core\Path\AliasStorageInterface;
 use Drupal\Tests\rules\Unit\Integration\RulesIntegrationTestBase;
 
 /**
- * @coversDefaultClass \Drupal\rules\Plugin\RulesAction\PathAliasDeleteByPath
+ * @coversDefaultClass \Drupal\rules_path_alias\Plugin\RulesAction\PathAliasDeleteByPath
  * @group RulesAction
  */
 class PathAliasDeleteByPathTest extends RulesIntegrationTestBase {
diff --git a/tests/src/Functional/ActionsFormTest.php b/tests/src/Functional/ActionsFormTest.php
index f5459ed..9cd8728 100644
--- a/tests/src/Functional/ActionsFormTest.php
+++ b/tests/src/Functional/ActionsFormTest.php
@@ -14,7 +14,13 @@ class ActionsFormTest extends RulesBrowserTestBase {
    *
    * @var array
    */
-  protected static $modules = ['node', 'rules', 'rules_ban', 'typed_data'];
+  protected static $modules = [
+    'node',
+    'rules',
+    'rules_ban',
+    'rules_path_alias',
+    'typed_data',
+  ];
 
   /**
    * We use the minimal profile because we want to test local action links.
diff --git a/tests/src/Functional/ConditionsFormTest.php b/tests/src/Functional/ConditionsFormTest.php
index e78f35f..72fa981 100644
--- a/tests/src/Functional/ConditionsFormTest.php
+++ b/tests/src/Functional/ConditionsFormTest.php
@@ -14,7 +14,13 @@ class ConditionsFormTest extends RulesBrowserTestBase {
    *
    * @var array
    */
-  protected static $modules = ['node', 'rules', 'rules_ban', 'typed_data'];
+  protected static $modules = [
+    'node',
+    'rules',
+    'rules_ban',
+    'rules_path_alias',
+    'typed_data',
+  ];
 
   /**
    * We use the minimal profile because we want to test local action links.
