Подтвердить что ты не робот

Избавиться от идентификатора (категории и статьи) из 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 - это число из ада, означающее без цели идентификатор категории

Теперь, просматривая ответ, я нашел этот ответ:

 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

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

 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 для последней версии 3.5 для Joomla

4b9b3361

Ответ 1

Я только что установил 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 on.

С Adds Suffix to URL переключается на Yes к URL-адресу добавляется .html.
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. A 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. Вы могли бы компенсировать 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']))
  • Когда к меню добавляется categoryID или articleID, они удаляют идентификатор категории $query['catid'], поскольку они знают, что у них есть уникальный глобальный псевдоним (строка ~ 69)

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

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

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

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

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