Я перестраиваю сайт в ModX, и я хочу автоматически перенаправить старые URL-адреса на новые страницы ModX.Переадресация ModX на основе строки запроса (Revolution 2.3)
старый URL имеет вида, http://www.oldsite.com/?pg=2
Каждую страница, как это, так что мне нужно вручную сопоставить старые идентификаторы страниц на новые идентификаторы ресурсов MODx. Например, pg = 2 является страницей контактов, которая теперь является идентификатором ресурса 11, поэтому я получаю карту, подобную [2 => 11, 3 => 15 и т. Д.]
Если я настрою основной index.php прямо в DOCROOT, это именно то, что я хочу:
/* execute the request handler */
if (!MODX_API_MODE) {
if (isset($_GET["pg"])) {
if ($_GET["pg"] == 2) {
$url = $url = $modx->makeUrl(11);
$modx->sendRedirect($url);
}
else {
// Page is set, but we don't have a redirect for it.
$modx->handleRequest();
}
}
else {
$modx->handleRequest();
}
}
Однако я не доволен хакерство index.php непосредственно. Я немного отстаю от опыта ModX, чтобы точно знать, где разместить этот код. Я пробовал:
- Отрывок, который я тогда назвал мой HTML заголовка перед любым HTML, но редирект перестал работать
- редиректора экстры, но это не работает на QUERY_STRING, я не подумайте
Любое понимание оценено за лучшее место для упаковки этого кода или указатель на дополнительный я должен использовать.
Решение, которое сработало для меня, следуя проницам Шона, является плагином. Код плагина приведен ниже. Для других новичков плагинов, таких как я, убедитесь, что вы заходите на вкладку «Системные события», чтобы включить плагин для события, к которому вы пытаетесь получить доступ.
<?php
if ($modx->event->name == 'OnWebPageInit') {
// Look to see if the GET params include a pg. If they do, we have a request
// for one of the old pages.
if (isset($_GET["pg"])) {
// Map the old pg IDs to the new resource IDs.
if ($_GET["pg"] == 2) {
$url = $modx->makeUrl(11);
}
// Add more here...
// When done trying to match, redirect.
// But only do the redirect if we found a URL.
if (isset($url)) {
$modx->sendRedirect($url, array('responseCode' => 'HTTP/1.1 301 Moved Permanently'));
exit;
}
}
}
Спасибо, Шон. Просто понимание, в котором я нуждался. Я не понимал, что плагины отличаются от Extras - я полагал, что они были тем же самым - путаница терминов WordPress, я думаю. Прочитав и от того, как вы это описали, это именно недостающее звено, которое я получил после этого, хотя я ценю вашу мысль о .htaccess как альтернативе. Спасибо также за совет доктора за 301 год. – sifriday
Да, плагины могут быть очень прокляты сладкими и мощными [особенно когда мы создаем пользовательские события!] Но их легко упускать из виду при поиске и устранении неисправностей, поскольку это не всегда очевидно, когда/где кусок кода запускается. Именно поэтому я предложил также подход .htaccess. [Сообщите нам, было ли это событие правильным и действительно активным! :) –
OnWebPageInit сделал трюк - я выложу код выше. – sifriday