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


Get rid of ID (category and article) from URL (Joomla 3.3 / 3.4 / 3.5)

我有一个Joomla 3.3.6(编辑:3.5.(网站,只有3个级别:

  • 四大类(一、二、三、三(
  • 每个都分为一些中间类别(A,B,C,...(
  • 最后是文章
  • 两种语言(英文、英文(

设置Search Engine Friendly URLsUse URL rewritingAdds Suffix to URLmultilanguage support后的URL为:

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

但是,如果您浏览到:

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]

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

尽管如此,如果另一个谷歌建议有效,那么更改Joomla核心就可以了。

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

这意味着一旦您将router.php移动到"本地",您就不需要在升级后重做所有内容。(当然,除非路由器.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-测试.ht访问


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

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

这些线路现在在 ./components/com_content/router.php 中是 34 和 295 .

再次将0更改为1,使其变为:

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


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

Adds Suffix to URL切换到 Yes 时,会将.html附加到 URL 中。
Use URL RewritingUnicode Aliases可选地工作。在 IIS7 或 Apache 上使用 URL 重写引擎时,必须将htaccess.txt重命名为 .htaccesswebconfig.txt重命名为 webconfig 。请注意,某些主机具有限制性的服务器配置。如果得到500 internal server error,则可能需要编辑.htaccess并通过添加前面的#来注释掉Options +FollowSymlinks和/或Options -Indexes和/或RewriteBase /行。后者已经在Joomla 3.5中停用。当Joomla安装在子文件夹而不是Web根目录中时,RewriteBase设置很有用。

在其他服务器上,将"Use URL Rewriting"设置为 No


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

在研究之后,我发现了一些有用的信息。免責聲明我不使用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 中的 ID 进行搜索查询 ( Line ~425 ->where($db->quoteName('catid') . ' = ' . (int) $vars['catid']) (
  • 当类别 ID 或文章 ID 附加到菜单时,他们会删除类别 ID $query['catid'],因为他们知道自己具有唯一的全局别名(第 ~69 行(

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

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

由于很多人都在抱怨这一点,所以应该在Joomla 3.5中修复

它。

参考资料和讨论:

  • 一个博客,提供有关此问题的一些解决方案解释:http://developernote.com/2012/05/how-to-remove-id-from-url-in-joomla-2-5/
  • 一个讨论您的问题及其解决方案的 joomla 论坛帖子:http://forum.joomla.org/viewtopic.php?f=712&t=826165&start=30
  • 也许一些插件可以解决这个问题:http://extensions.joomla.org/extensions/site-management/sef

最后,开发人员似乎意识到了;)的局限性

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

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

传统路由器 - 路径:@www/组件/com_content/帮助程序/旧版路由器.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路由、其他解决方案和插件。

您可以在此处查看结果: https://new.ac-news.org (建设中(

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

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