从URL(Joomla 3.3 / 3.4 / 3.5)中删除ID(类别和文章)

2022-08-30 23:45:54

我有一个(编辑:)网站,只有3个级别组织:Joomla 3.3.63.5.

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

后置设置 、 和 应采用以下形式:URLSearch Engine Friendly URLsUse URL rewritingAdds 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

另外,我注意到ID号是不同的。虽然整个网址是

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]

显示正常,但找不到页面。如果我们能提供一个使用.htaccess而不是改变Joomla核心的解决方案,那就更好了。URLs

尽管如此,如果这个谷歌建议是有效的,那么改变Joomla核心就好了。

 Copy “components/com_content/router.php” to “/templates/your-template/html”

这意味着一旦你移动到你的“本地”,你就不需要在升级后重做所有的东西。(当然,除非路由器.php已更新,以防您最好再次镜像它。router.php

感谢您抽出宝贵时间解决这个难题!

引用

1-更改/删除URL中的文章ID?

2-删除文章ID号

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

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

5- 启用 SEF

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

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

8- .htaccess 重定向规则

9- Test .htaccess


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


答案 1

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

这些行现在是 34 和 295 in 。./components/com_content/router.php

再次将 更改为,使其变为:01

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


我的网址是例如 打开时工作正常。http://joomla.lan/en/category-en-gb/article-en-gbSearch Engine Friendly URLs

与 切换到 一个被追加到 URL。
并选择性地工作。在 IIS7 或 Apache 上使用 URL 重写引擎时,必须重命名为 和 .请注意,某些主机具有限制性的服务器配置。如果得到 ,则可能需要编辑并注释掉行和/或和/或通过添加前面的 .后者已经在Joomla 3.5中停用。当Joomla安装在子文件夹而不是Web根目录中时,设置很有用。Adds Suffix to URLYes.htmlUse URL RewritingUnicode Aliaseshtaccess.txt.htaccesswebconfig.txtwebconfig500 internal server error.htaccessOptions +FollowSymlinksOptions -IndexesRewriteBase /#RewriteBase

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


我无法重现您的问题,使用这两个代码编辑,一切都正常工作。请再次尝试,如果无法解决,请发布确切的行为(urls,错误aso)。如果无法修复它,则可能必须重新安装源。


答案 2

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

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

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

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

应该足够了。但要小心,使用此选项,可能两个URL(带ID和不带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,因为它们知道自己具有唯一的全局别名(第 69 行)$query['catid']

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

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

既然很多人都在抱怨这一点,那么应该在Joomla 3.5中修复它

参考和讨论:

为了结束一个光明的音符,似乎开发人员已经意识到了局限性。 ;)


推荐