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

у меня есть Joomla 3.3.6 (В редакции: 3.5.) сайт организован только в 3-х уровнях:

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

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 — это число из ада, указывающее ни для чего ID категории

Сейчас, ища ответ, я нашел этот ответ:

 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 было бы просто замечательно, если бы это другое гугл-предложение было верным.

 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- Удалить идентификатор статьи из URL Joomla 3

7- Удалить идентификатор статьи из URL Joomla 3

8- .htaccess правило перенаправления

9- Тест .htaccess


Отредактировано (2016 / май / 02): NEW Bounty для Joomla последняя версия 3.5

17

Решение

Я только что установил 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 .html добавляется к URL.
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 установлена ​​в подпапке, а не в веб-корне.

На других серверах установлены Use URL Rewriting в No,


Я не могу воспроизвести вашу проблему, с этими двумя изменениями кода все работает правильно. Пожалуйста, попробуйте еще раз, и если вы не можете решить, опубликуйте точное поведение (URL, ошибки также.)
Если вы не можете исправить это, возможно, вам придется переустановить исходные коды.

2

Другие решения

Посмотрев его, я нашел несколько полезных фрагментов информации. ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ Я не использую Joomla и не пробовал это на работающей установке, это только результаты некоторых поисков & чтение исходного кода. Во всяком случае, вот что я нашел.

Из того, что у меня есть собиратель, кажется, что меняется

$advanced = $params->get('sef_advanced_link', 0);

в

$advanced = $params->get('sef_advanced_link', 1);

должно быть достаточно. Будьте осторожны, хотя, с этой опцией, вероятно, будут доступны оба URL (с и без идентификаторов), что не хорошо для SEO. Проблема с 404, но это похоже на проблему с системой маршрутизации Joomla. Вы можете компенсировать 404 с помощью ссылок меню, которые только настроены, но никогда не используются (см. Ниже).

Некоторые истоки вашей проблемы:

  • Например, в своей маршрутизации они используют меню, чтобы найти идентификатор категории (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']))
  • Когда к меню добавляется categoryID или articleID, они удаляют ID категории $query['catid'] потому что они знают, что имеют уникальный глобальный псевдоним (строка ~ 69)

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

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

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

Рекомендации & Обсуждение:

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

1

По вопросам рекламы [email protected]