У меня проблемы со ссылками в Joomla 3.8.
У меня есть ссылка как Http: //mysite.loc/my-category/my-subcategory/89 и это правильная ссылка для материала с идентификатором 89.
Но когда я вхожу Http: //mysite.loc/my-category/my-subcategory/89asdasdasdasd
Joomla покажи мне эту страницу и ответь 200 / ок. Как я могу обработать это и показать ошибку 404 для URL, как это? SEF включен
Да, именно так ведет себя Joomla. Когда у вас есть что-то вроде yoursite.com/my-category/123-blablabla
Joomla загрузит статью, имеющую 123
в качестве удостоверения личности. На самом деле статья с ID 123
даже не должен быть в my-category
категория. Это одна из странных вещей в Joomla.
Решением этой проблемы является удаление идентификатора статьи из URL, как описано Вот. Имейте в виду две вещи: 1) это базовая модификация и 2) инструкции о том, как это сделать, могут немного отличаться для 3.8. +.
Я нахожу решение его работы для меня.
В классе ContentRouterRulesLegacy найдите метод parse, и куда поместите его запрос к db для выполнения статьи info.
$query = $db->getQuery(true)
->select($db->quoteName(array('alias', 'catid')))
->from($db->quoteName('#__content'))
->where($db->quoteName('id') . ' = ' . (int) $id,'AND')
->where($db->quoteName('alias') . ' = ' . "'$alias'");
$db->setQuery($query);
$article = $db->loadObject();
if ($article)
{
if ($article->alias == $alias)
{
$vars['view'] = 'article';
$vars['catid'] = (int) $article->catid;
$vars['id'] = (int) $id;
return;
}
}
else
{
header('HTTP/1.0 404 Not Found');
JError::raiseError(404, 'JGLOBAL_RESOURCE_NOT_FOUND');
exit(404);
}