我有一个Joomla 3.3.6
(已编辑:3.5.
)网站,只有3个级别:
设置URL
,Search Engine Friendly URLs
,Use URL rewriting
和Adds Suffix to URL
, 之后的multilanguage 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]
URLs
显示正常,但找不到页面。如果我们能够使用 .htaccess 提供解决方案而不是更改Joomla核心,那将会好得多。
然而,如果其他googled建议有效,更改Joomla核心也不错。
Copy “components/com_content/router.php” to “/templates/your-template/html”
这意味着,一旦您将router.php
移动到本地",您就不需要在升级后重做所有内容。 (当然,除非你更新了router.php,以防你再次镜像它。)
感谢您抽出宝贵时间来解决这个难题!
参考
1- Change/ Remove Article ID in URL?
2- Removing the Article ID number
3- How to remove article id in url?
4- Remove article id from url for joomla 3.0
6- Remove article id from joomla 3 URL
7- Remove article id from joomla 3 URL
已编辑(2016年/月/ 02日):Joomla最新版本3.5的新赏金
答案 0 :(得分:2)
我刚刚新安装了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
on。
将Adds Suffix to URL
切换为Yes
后,.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
。
我无法重现您的问题,使用这两个代码编辑一切正常。请再试一次,如果你无法解决,请发布确切的行为(网址,错误aso。) 如果您无法修复它,则可能必须重新安装源。
答案 1 :(得分:1)
在研究之后,我发现了一些有用的信息。 免责声明我没有使用Joomla,并且没有在工作安装上试过这个,这些只是一些搜索和结果的结果。阅读源代码。无论如何,这是我找到的。
从我收集到的内容来看,似乎正在改变
$advanced = $params->get('sef_advanced_link', 0);
到
$advanced = $params->get('sef_advanced_link', 1);
应该足够了。 小心但,使用此选项,可能两个URL(有和没有ID)都可用,这对SEO不利。问题在于404,但这似乎是Joomla路由系统的一个问题。您可以使用仅配置但从未使用的菜单链接补偿404s(见下文)。
问题的一些根源:
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']
,因为他们知道他们有唯一的全局别名(Line~69)因此,一种解决方案是执行以下操作:
您可以尝试为每个类别和每篇文章创建一个菜单项。即使菜单没有在任何地方显示并且只在管理界面中配置,它也会为类别和文章创建全局唯一的路由别名,这将让Joomla找到正确的文章/类别。据我所知,当一个类别或文章有一个菜单项时,只使用标题别名。但由于他们没有,他们使用id + slug的组合来定位资源。
由于很多人都抱怨这个,所以 应该在Joomla 3.5中修复
参考文献&讨论:
要完成一个明亮的音符,似乎是the developers are aware of the limitations;)
答案 2 :(得分:0)
另一种简单的解决方案是创建一个菜单项作为类别博客,并使用别名作为您的类别。
它不会删除您网站中的URL,但是您仍然可以将XML站点地图发送给搜索引擎,而无需使用带有ID的那些类别的URL