Избавиться от идентификатора (категории и статьи) из URL (Joomla 3.3 / 3.4 / 3.5)

У меня есть сайт Joomla 3.3.6 (отредактированный: 3.5. ), Организованный только в трех уровнях:

  • Четыре большие категории (i, ii, iii, iiii)
  • Каждый из них делится на некоторые промежуточные категории (A, B, C, …)
  • И, наконец, статьи
  • Два языка (en, pt)

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 )
  • Для каждого сегмента URL (разделенного /), они сначала ищут псевдонимы категории поиска, поэтому обязательно проверяйте свои псевдонимы. Если они не могут найти псевдоним в категориях, они полагаются на идентификатор в URL-адресе для своего поискового запроса ( Line ~425 ->where($db->quoteName('catid') . ' = ' . (int) $vars['catid']) )
  • Когда к меню добавляется категорияID или articleID, они удаляют $query['catid'] идентификатора категории ID $query['catid'] поскольку они знают, что у них есть уникальный глобальный псевдоним (строка ~ 69)

Поэтому одним из решений является следующее:

Вы можете попробовать создать элемент меню для каждой категории и каждой статьи. Даже если меню не отображается нигде и настраивается только в интерфейсе администрирования, оно создаст глобальные уникальные псевдонимы маршрутизации для категорий и статей, которые позволят Joomla найти подходящую статью / категорию. Из того, что я понимаю, когда категория или статья имеет пункт меню, используются только псевдонимы заголовков. Но поскольку у них их нет, они используют комбинацию id + slug для поиска ресурса.

Поскольку многие люди жалуются на это, это должно быть исправлено в Joomla 3.5

Ссылки и обсуждения:

Чтобы закончить яркую заметку, кажется, что разработчики знают об ограничениях 😉