у меня есть Joomla 3.3.6
(В редакции: 3.5.
) сайт организован только в 3-х уровнях:
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
6- Удалить идентификатор статьи из URL Joomla 3
7- Удалить идентификатор статьи из URL Joomla 3
8- .htaccess правило перенаправления
Отредактировано (2016 / май / 02): NEW Bounty для 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
.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, ошибки также.)
Если вы не можете исправить это, возможно, вам придется переустановить исходные коды.
Посмотрев его, я нашел несколько полезных фрагментов информации. ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ Я не использую 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
)Line ~425 ->where($db->quoteName('catid') . ' = ' . (int) $vars['catid'])
)$query['catid']
потому что они знают, что имеют уникальный глобальный псевдоним (строка ~ 69)Поэтому одно из решений заключается в следующем:
Вы можете попробовать создать пункт меню для каждой категории и каждой статьи. Даже если меню нигде не отображается и настроено только в интерфейсе администрирования, оно создаст глобальные уникальные псевдонимы маршрутизации для категорий и статей, что позволит Joomla найти нужную статью / категорию. Из того, что я понимаю, когда у категории или статьи есть пункт меню, тогда используются только псевдонимы заголовков. Но так как у них их нет, они используют комбинацию id + slug, чтобы найти ресурс.
Поскольку многие люди жалуются на это, это должен быть исправлено в Joomla 3.5
Рекомендации & Обсуждение:
Чтобы закончить на яркой ноте, кажется, что разработчики знают об ограничениях 😉