У меня есть сайт Joomla 3.3.6
(отредактированный: 3.5.
), Организованный только в трех уровнях:
URL
после установки URL
Search Engine Friendly URLs
, Use URL rewriting
, Adds Suffix to URL
и multilanguage support
должен быть в форме:
http://www.example.com/en/bigcatiii/intercatA/articlex.html
Но, как и многие другие, у которых Joomla установлен и просит решения с Joomla-Baby-Version, я получил:
http://www.example.com/en/bigcatiii/666-intercatA/articlex.html
где 666 – это число из ада, означающее без каких-либо целей идентификатор категории
Теперь, просматривая ответ, я нашел этот ответ:
Edit “components/com_content/router.php“ (You'll probably have to re-do this step every time you update Joomla.) Replace the lines 38 and 290 with: $advanced = $params->get('sef_advanced_link', 1); and Replace line 426 with ->where($db->quoteName('alias') . ' = ' . $db->quote($segment));
Ну, во-первых, строка 426 уже похожа на оригинал. Во-вторых, это не делает трюк. Он работает с:
http://www.example.com/en/bigcatiii/intercatA/articlex.html
Но это ломает ошибку 404, если вы просматриваете:
http://www.example.com/en/bigcatiii/intercatA.html
Кроме того, я заметил, что идентификационные номера отличаются. Хотя весь URL-адрес
http://www.example.com/en/bigcatiii/666-intercatA/articlex.html
Страница одинаковой категории
http://www.example.com/en/bigcatiii/333-intercatA.html
Существует также другое решение, которое лучше звучит, но также не работает, на основе .htaccess
RewriteEngine on RewriteBase / RewriteRule (\d+)-([^/]*) $2 [R=301,L]
URLs
выглядят нормально, но страницы не найдены. Было бы намного лучше, если бы мы могли предоставить решение, использующее .htaccess, вместо изменения ядра Joomla.
Тем не менее, изменение ядра Joomla было бы прекрасно, если бы это другое предложение для Google было действительным.
Copy “components/com_content/router.php” to “/templates/your-template/html”
Это означает, что после того, как вы переместили router.php
на ваш «локальный», вам не нужно будет переделывать все содержимое после обновления. (Если, конечно, router.php не обновляется, если вам лучше его снова отразить.)
Спасибо за ваше время, чтобы решить эту головоломку!
Рекомендации
1- Изменить / Удалить идентификатор статьи в URL-адресе?
2- Удаление идентификационного номера статьи
3- Как удалить идентификатор статьи в URL-адресе?
4- Удалить идентификатор статьи из url для joomla 3.0
5- Включение SEF
6- Удалить идентификатор статьи из joomla 3 URL
7- Удалить идентификатор статьи из joomla 3 URL
Правило перенаправления 8- .htaccess
9- Тест .htaccess
Отредактировано (2016 / май / 02): NEW Bounty для последней версии 3.5 для Joomla 3.5
Я только что установил joomla 3.5, и старый метод работает для меня. Поскольку в файле маршрутизатора что-то было изменено, вам нужно повторить процедуру после обновления Joomla.
Теперь строки составляют 34 и 295 в ./components/com_content/router.php
.
Снова измените значение 0
на 1
так, чтобы оно стало:
$advanced = $params->get('sef_advanced_link', 1);
Мой URL-адрес, например, http://joomla.lan/en/category-en-gb/article-en-gb
отлично работает с Search Engine Friendly URLs
.
С добавлением Adds Suffix to URL
переведенному на Yes
к URL-адресу добавляется .html
.
Use URL Rewriting
необязательные Use URL Rewriting
и Unicode Aliases
. При использовании механизма перезаписи URL-адресов на IIS7 или Apache вы должны переименовать htaccess.txt
в .htaccess
и webconfig.txt
в webconfig
. Обратите внимание, что некоторые хостеры имеют ограничительную конфигурацию сервера. Если вы получите 500 internal server error
, вам может потребоваться отредактировать .htaccess
и прокомментировать строки Options +FollowSymlinks
и / или Options -Indexes
и / или RewriteBase /
, добавив предыдущий #
. Последний уже отключен в Joomla 3.5. RewriteBase
полезен, когда Joomla установлен во RewriteBase
, а не в корневой RewriteBase
.
На других серверах установите Use URL Rewriting
в No
Я не могу воспроизвести вашу проблему, все работает правильно с этими двумя изменениями кода. Повторите попытку, и если вы не можете разрешить, опубликуйте точное поведение (URL-адреса, ошибки.) Если вы не можете исправить это, возможно, вам придется переустановить источники.
Изучив его, я нашел несколько полезных фрагментов информации. ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ Я не использую Joomla и не пробовал это на рабочей установке, это только результаты некоторых исходных кодов поиска и чтения. Во всяком случае, вот что я нашел.
Из того, что я собираю, кажется, что изменение
$advanced = $params->get('sef_advanced_link', 0);
в
$advanced = $params->get('sef_advanced_link', 1);
должно быть достаточно. Будьте осторожны, хотя , с этой опцией, возможно, будет доступен и URL (с идентификаторами и без него), что не подходит для SEO. Проблема связана с 404, но это похоже на проблему с системой маршрутизации Joomla. Вы могли бы компенсировать 404s ссылками меню, которые настроены, но никогда не используются (см. Ниже).
Некоторые причины вашей проблемы:
Line ~385 // We get the category id from the menu item and search from there
) Line ~425 ->where($db->quoteName('catid') . ' = ' . (int) $vars['catid'])
) $query['catid']
идентификатора категории ID $query['catid']
поскольку они знают, что у них есть уникальный глобальный псевдоним (строка ~ 69) Поэтому одним из решений является следующее:
Вы можете попробовать создать элемент меню для каждой категории и каждой статьи. Даже если меню не отображается нигде и настраивается только в интерфейсе администрирования, оно создаст глобальные уникальные псевдонимы маршрутизации для категорий и статей, которые позволят Joomla найти подходящую статью / категорию. Из того, что я понимаю, когда категория или статья имеет пункт меню, используются только псевдонимы заголовков. Но поскольку у них их нет, они используют комбинацию id + slug для поиска ресурса.
Поскольку многие люди жалуются на это, это должно быть исправлено в Joomla 3.5
Ссылки и обсуждения:
Чтобы закончить яркую заметку, кажется, что разработчики знают об ограничениях 😉