我有一个Joomla 3.3.6
(编辑:3.5.
(网站,只有3个级别:
- 四大类(一、二、三、三(
- 每个都分为一些中间类别(A,B,C,...(
- 最后是文章
- 两种语言(英文、英文(
设置Search Engine Friendly URLs
、Use URL rewriting
、Adds Suffix to URL
和multilanguage 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-gb
Search Engine Friendly URLs
开时工作正常。
将Adds Suffix to URL
切换到 Yes
时,会将.html
附加到 URL 中。
Use URL Rewriting
和Unicode Aliases
可选地工作。在 IIS7 或 Apache 上使用 URL 重写引擎时,必须将htaccess.txt
重命名为 .htaccess
,webconfig.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