17

我有一个Joomla 3.3.6(已编辑:)3.5.网站,仅分为 3 个级别:

  • 四大类(i、ii、iii、iii)
  • 每个都分为一些中间类别(A,B,C,...)
  • 最后是文章
  • 两种语言 (en, pt)

URL设置后的Search Engine Friendly URLs, Use URL rewriting,Adds Suffix to URLmultilanguage support,采用以下形式:

http://www.example.com/en/bigcatiii/intercatA/articlex.html

但是,自从 Joomla-Baby-Version 以来,许多其他安装了 Joomla 并要求提供解决方案的人,我得到了:

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 中的文章 ID?

2- 删除文章 ID 号

3-如何删除网址中的文章ID?

4- 从 joomla 3.0 的 url 中删除文章 ID

5- 启用 SEF

6- 从 joomla 3 URL 中删除文章 ID

7- 从 joomla 3 URL 中删除文章 ID

8- .htaccess 重定向规则

9-测试.htaccess


已编辑(2016/May/02):Joomla 最新版本 3.5 的新赏金

4

4 回答 4

2

我刚刚安装了一个 joomla 3.5,旧方法对我有用。由于路由器文件中的某些内容已被修改,因此您必须在 joomla 升级后重复该过程。

这些行现在是 34 和 295 英寸./components/com_content/router.php

再次将0into更改为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选择工作。在 IIS7 或 Apache 上使用 URL 重写引擎时,您必须重命名htaccess.txt为. 请注意,某些主机具有限制性服务器配置。如果你得到一个,你可能需要编辑和注释掉这些行和/或和/或添加一个前面的. 后者已在 Joomla 3.5 中停用。当Joomla 安装在子文件夹而不是 Web 根目录中时,设置很有用。.htaccesswebconfig.txtwebconfig500 internal server error.htaccessOptions +FollowSymlinksOptions -IndexesRewriteBase /#RewriteBase

在其他服务器上设置Use URL RewritingNo.


我无法重现您的问题,这两个代码编辑一切正常。请再试一次,如果您无法解决,请发布确切的行为(网址、错误等)。如果您无法修复它,您可能需要重新安装源代码。

于 2016-05-09T10:20:17.203 回答
1

看完之后,我发现了一些有用的信息。免责声明我不使用 Joomla,也没有在工作安装中尝试过,这些只是一些搜索和阅读源代码的结果。无论如何,这就是我发现的。

从我收集到的信息来看,似乎在改变

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

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

应该足够了。不过要小心,使用此选项,可能两个 URL(带和不带 ID)都可用,这对 SEO 不利。问题出在 404 上,但这似乎是 Joomla 路由系统的问题。您可以使用仅配置但从未使用过的菜单链接来补偿 404(见下文)。

您的问题的一些根源:

  • 例如,在他们的路由中,他们使用菜单查找类别 ID ( Line ~385 // We get the category id from the menu item and search from there)
  • 对于每个 URL 段(由 / 分隔),它们首先搜索类别别名,因此请务必检查您的别名。如果他们无法在类别中找到别名,他们将依赖 URL 中的 ID 进行搜索查询 ( Line ~425 ->where($db->quoteName('catid') . ' = ' . (int) $vars['catid']))
  • 当 categoryID 或 articleID 附加到菜单时,它们会删除类别 ID $query['catid'],因为它们知道它们具有唯一的全局别名(第 ~69 行)

因此,一种解决方案是执行以下操作:

您可以尝试为每个类别和每篇文章创建一个菜单项。即使菜单没有显示在任何地方并且仅在管理界面中配置,它也会为类别和文章创建全局唯一路由别名,这将使 Joomla 找到正确的文章/类别。据我了解,当类别或文章具有菜单项时,仅使用标题别名。但是由于他们没有,他们使用 id + slug 的组合来定位资源。

由于很多人都在抱怨这个问题,它应该在 Joomla 3.5 中修复

参考与讨论:

最后,开发人员似乎意识到了这些限制;)

于 2014-10-12T04:10:44.793 回答
1

Joomla 3.7(?) 到 3.10.5 旧版路由器问题修复

这是在 Joomla 3.10.5 上对我有用的解决方案,但从 3.7 开始可能是相同的(如果在 4.0 中未修复)。

旧版路由器- 路径:@www/components/com_content/helpers/legacyrouter.php

破解遗留路由器,并通过注释掉遗留路由器中的第 199 行并像这样替换它来停用将类别 id 附加到段数组中:

//if (!$advanced && count($array))
if (false)

尝试了这些解决方案

  • 默认$advanced为 1 或更多,以及此处和此链接中的其他解决方案:https ://vincentping.com/en/remove-category-article-id-from-url-in-joomla-3.html对我不起作用:

还有更多:网站文章网址只需要删除类别 ID,而不是文章 ID,因为删除两者都会导致 404

希望这可以帮助某人不必花费大量时间尝试.htaccess路由,其他解决方案和插件,然后再诉诸此 hack。

你可以在这里看到结果:https ://new.ac-news.org (正在建设中)

于 2022-02-06T16:46:39.160 回答
0

另一个简单的解决方案是创建一个菜单项作为类别博客并将别名用作您的类别。

它不会删除您网站中的 URL,但您仍然可以将 XML 站点地图发送到您的搜索引擎,而无需那些带有 Id 的类别 URL

于 2020-05-11T16:32:16.737 回答