[英]Get rid of ID (category and article) from URL (Joomla 3.3 / 3.4 / 3.5)
我有一个
Joomla 3.3.6<\/code> (edited:
3.5.<\/code> ) 站点,仅组织在 3 个级别:
两种语言 (en, pt)<\/li><\/ul> 设置Search Engine Friendly URLs<\/code> 、 Use URL<\/code> Use URL rewriting<\/code> 、 Adds Suffix to URL<\/code>和multilanguage support<\/code>后的 URL应<\/strong>为以下形式:
但是,自从 Joomla-Baby-Version 以来,许多其他安装了 Joomla 并要求提供解决方案的人,我得到了:
其中 666 是来自地狱的数字,无目的地指示类别 ID<\/strong>
现在浏览答案,我找到了这个答案:
嗯,首先,第 426 行已经和原来的一样了。 其次,这不能解决问题。 它确实适用于:
但是,如果您浏览到以下内容,则会出现404<\/strong>错误:
另外,我注意到身份证<\/strong>号码不同。 虽然整个 URL 是
相同的类别描述页面是
还有另一种听起来更好的解决方案,但也不起作用,基于.htaccess<\/strong>
URLs<\/code>显示正常,但找不到页面。
如果我们可以使用.htaccess<\/strong>而不是更改 Joomla 核心来提供解决方案,那就更好了。
尽管如此,如果这个其他谷歌搜索的建议是有效的,改变 Joomla 核心就可以了。
这意味着一旦您将
router.php<\/code>移动到“本地”,您就不需要在升级后重做所有的东西。
(当然,除非 router.php 已更新,以防您最好再次镜像它。)
感谢您花时间解决这个难题!
参考<\/strong>
4- 从 joomla 3.0 的 url 中删除文章 ID<\/a>
6- 从 joomla 3 URL 中删除文章 ID<\/a>
7- 从 joomla 3 URL 中删除文章 ID<\/a>
已编辑(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);
我的 URL 是例如http://joomla.lan/en/category-en-gb/article-en-gb
与Search Engine Friendly URLs
http://joomla.lan/en/category-en-gb/article-en-gb
工作正常。
Adds Suffix to URL
切换为Yes
是”后,将在 URL 中附加.html
。
可选地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
。
我无法重现您的问题,这两个代码编辑一切正常。 请再试一次,如果无法解决,请发布确切的行为(网址、错误)。如果无法修复,则可能需要重新安装源。
仔细研究之后,我发现了一些有用的信息。 免责声明我不使用 Joomla,也没有在工作安装上尝试过,这些只是一些搜索和阅读源代码的结果。 无论如何,这就是我发现的。
从我收集到的信息来看,似乎正在改变
$advanced = $params->get('sef_advanced_link', 0);
到
$advanced = $params->get('sef_advanced_link', 1);
应该够了。 不过要小心,使用此选项,可能两个 URL(带 ID 和不带 ID)都可用,这对 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 中修复
参考与讨论:
另一个简单的解决方案是创建一个菜单项作为类别博客并使用别名作为您的类别。
它不会删除您网站中的 URL,但您仍然可以将 XML 站点地图发送到您的搜索引擎,而无需那些带有 Id 的类别 URL
Joomla 3.7(?) 到 3.10.5 旧版路由器问题修复<\/strong>
这是在 Joomla 3.10.5 上对我有用的解决方案,但从 3.7 开始可能是相同的(如果在 4.0 中未修复)。
旧版路由器<\/strong>- 路径: @www\/components\/com_content\/helpers\/legacyrouter.php<\/a>
破解遗留路由器,并通过注释掉遗留路由器<\/strong>中的第 199 行<\/strong>并像这样替换它来停用将类别 ID 附加到段数组:
//if (!$advanced && count($array))
if (false)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.