//<?php
// Virtual Aliases
// version 0.0.1
// Allows for an unlimited number of custom aliases per page.
// By Brian Stanback @ www.stanback.net
// On Install: Check the the "OnPageNotFound" box in the System Events tab.
// Plugin configuration: &aliasesTV=Aliases TV name;string;Aliases
// For overriding documents, create a new template variabe (TV) named
// Aliases with the following option:
// Input Type: Textarea (Smaller)
//
// Aliases should be added to the TV, one per line.
// Omit any leading or trailing slashes as well as the default suffix (usaully .html)
// Begin plugin code
$e = &$modx->event;
if ($e->name == "OnPageNotFound")
{
// Retrieve requested path + alias
$documentAlias = $modx->documentIdentifier;
$documentAlias = ($modx->virtualDir == "") ? $documentAlias : $modx->virtualDir . '/' . $documentAlias;
// Search TVs for potential alias matches
$sql = "SELECT tvc.contentid as id, tvc.value as value FROM " . $modx->getFullTableName('site_tmplvars') . " tv ";
$sql .= "INNER JOIN " . $modx->getFullTableName('site_tmplvar_templates') . " tvtpl ON tvtpl.tmplvarid = tv.id ";
$sql .= "LEFT JOIN " . $modx->getFullTableName('site_tmplvar_contentvalues') . " tvc ON tvc.tmplvarid = tv.id ";
$sql .= "LEFT JOIN " . $modx->getFullTableName('site_content') . " sc ON sc.id = tvc.contentid ";
$sql .= "WHERE sc.published = 1 AND tvtpl.templateid = sc.template AND tv.name = '$aliasesTV' AND tvc.value LIKE '%" . $modx->db->escape($documentAlias) . "%'";
$results = $modx->dbQuery($sql);
// Attempt to find an exact match
$found = 0;
while ($found == 0 && $row = $modx->db->getRow($results))
{
$pageAliases = explode("\n", $row["value"]);
while ($found == 0 && $alias = each($pageAliases))
{
if (trim($alias[1]) == $documentAlias) // Check for a match
$found = $row["id"];
}
}
if ($found) // Redirect to new document, if an alias was found
{
$pageUrl = $modx->makeUrl($found, '', '', "full");
$modx->sendRedirect($pageUrl, 0, "REDIRECT_HEADER", "301"); // Send a permanent redirect
exit(0);
}
header("HTTP/1.0 404 Not Found");
header("Status: 404 Not Found");
}Have you checked the OnPageNotFound?Yes, under "Parser Service Events" as it didn’t exist under "System"
What did you name the aliases TV?Aliases
What do the aliases you’ve defined look like?
Are you receiving a MODx-based 404 error when visiting aliased URLs?Yes
What is the value of $documentAlias being set to?As per original code:
$documentAlias = str_replace($modx->config['friendly_url_suffix'], '', $_REQUEST['q']);
$documentAlias = str_replace($modx->config['friendly_url_suffix'], '', $_REQUEST['q']); echo $documentAlias; exit;
One more thing, can you try adding a quick, temporary, echo statement to inspect the value of $documentAlias.test/whatevs
Can you list your configuration settings for the Friendly URLs tab under configuration?Use FriendlyURLs: Yes