Dr *_*eco 17 php .htaccess joomla joomla3.3 joomla3.4
我有一个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));
Run Code Online (Sandbox Code Playgroud)
嗯,首先,第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]
Run Code Online (Sandbox Code Playgroud)
在URLs出现确定,但页面没有找到.如果我们可以使用.htaccess提供解决方案而不是更改Joomla核心,那将会好得多.
如果其他Google搜索的建议有效,那么改变Joomla核心就可以了.
Copy “components/com_content/router.php” to “/templates/your-template/html”
Run Code Online (Sandbox Code Playgroud)
这意味着一旦你移动router.php到"本地",你就不需要在升级后重做所有的东西了.(当然,除非你更新了router.php,以防你再次镜像它.)
感谢您抽出宝贵时间来解决这个难题!
参考
编辑(2016/5月/ 02):Joomla最新版本3.5的新赏金
经过一番研究,我发现了一些有用的信息。免责声明我不使用 Joomla,也没有在工作安装上尝试过,这些只是一些搜索和阅读源代码的结果。无论如何,这就是我发现的。
据我所知,似乎正在改变
$advanced = $params->get('sef_advanced_link', 0);
Run Code Online (Sandbox Code Playgroud)
到
$advanced = $params->get('sef_advanced_link', 1);
Run Code Online (Sandbox Code Playgroud)
应该足够了。但要小心,使用此选项时,可能两个 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 中修复它
参考文献和讨论:
最后,开发人员似乎意识到了这些限制;)