Jump to main content Jump to doc navigation


Forwards the request to another resource without changing the URL. If the ID provided does not exist, sends to a 404 Error page.


API Doc: modX::sendForward()

void sendForward (integer $id, [string|array $options = null], [boolean $sendErrorPage = true])
  • $id is a Resource ID (you cannot sendForward to an URL - if you need to pass some value, use modX::setPlaceholder and call that on the target resource).
  • $options is assumed to be a proper HTTP response code when it is a string, eg "HTTP/1.1 301 Moved Permanently". If it's an array, you can use the following options:
    • response_code: response code, please see example below
    • error_type: response code type, please see example below. F.e. 404
    • error_header: "Header:" value
    • error_pagetitle: error pagetitle value
    • error_message: error message
    • merge: a way to merge the resource currently in $modx->resource with the target resource. The content, pub_date, unpub_date, richtext, _content and _processed values are excluded as well as the value of the forward_merge_excludes system setting. I'm not sure if this is supposed to be used out of the core and there's probably better ways to get data combined (eg: setPlaceholder) then merging.
  • $sendErrorPage Whether we should skip the sendErrorPage if the resource does not exist.


Send the user to Resource ID 234 without actually changing the URL.


Send user to 404 Error page, for actual page ID we use error_page system setting value. If there is no such value, the value of site_start will be used.

$options = array(
   'response_code' => '404 Not Found',
   'error_type' => '404',
   'error_header' => '404 Not Found',
   'error_pagetitle' => 'Error 404: Page not found',
   'error_message' => '<h1>Page not found</h1><p>The page you requested was not found.</p>'
$this->sendForward($this->getOption('error_page', $options, $this->getOption('site_start')), $options, false);

Show replacement page, keeping original pagetitle, introtext and other fields. To do this, you just need to specify an additional array with keys:

$options = array(
	'merge' => 1, // field gluing mechanism enabled
	// original fields list that need to be excluded from the result
	'forward_merge_excludes' => 'id,template,type,published,class_key'
$this->sendForward(15, $options);

forward_merge_excludes setting manages source page fields that need to be excluded from the results. Next fields will definitely be added as well: content,pub_date,unpub_date,richtext

This is good approach if you want hide/protect some resources but left pagetitle and description for visitors and search crawlers.

See Also

Support the team building MODX with a monthly donation.

The budget raised through OpenCollective is transparent, including payouts, and any contributor can apply to be paid for their work on MODX.



$0 per month—let's make that $500!

Learn more