1 path.module path_is_alias_reserved($alias, $source, $langcode = LANGUAGE_NONE)

Determine if a possible URL alias would conflict with any existing paths.

Returning TRUE from this function will trigger path_alias_uniquify() to generate a similar URL alias with a suffix to avoid conflicts.


string $alias: The potential URL alias.

string $source: The source path for the alias (e.g. 'node/1').

string $langcode: The language code for the alias (e.g. 'en').

Return value

bool: TRUE if $alias conflicts with an existing, reserved path, or FALSE if it does not match any reserved paths.


core/modules/path/path.module, line 949
Enables users to customize URLs and provide automatic URL alias patterns.


function path_is_alias_reserved($alias, $source, $langcode = LANGUAGE_NONE) {
  $is_existing_alias = (bool) db_query_range("SELECT pid FROM {url_alias} WHERE source <> :source AND alias = :alias AND langcode IN (:language, :language_none) ORDER BY langcode DESC, pid DESC", 0, 1, array(
    ':source' => $source,
    ':alias' => $alias,
    ':language' => $langcode,
    ':language_none' => LANGUAGE_NONE,

  if ($is_existing_alias) {
    return TRUE;

  module_load_include('inc', 'path');
  if (_path_is_callback($alias)) {
    return TRUE;

  foreach (module_implements('path_is_alias_reserved') as $module) {
    $result = module_invoke($module, 'path_is_alias_reserved', $alias, $source, $langcode);
    if (!empty($result)) {
      // As soon as the first module says that an alias is in fact reserved,
      // then there is no point in checking the rest of the modules.
      return TRUE;

  return FALSE;