Php 从URL中删除ID(类别和文章)(Joomla 3.3/3.4/3.5)
我有一个Php 从URL中删除ID(类别和文章)(Joomla 3.3/3.4/3.5),php,.htaccess,joomla,joomla3.3,joomla3.4,Php,.htaccess,Joomla,Joomla3.3,Joomla3.4,我有一个Joomla 3.3.6(编辑:3.5.)网站,只组织了3个级别: 四大类(一、二、三、三) 每一个都分为一些中间类别(A、B、C等) 最后是文章 两种语言(英语、普通话) 设置搜索引擎友好URL后的URL,使用URL重写,为URL添加后缀和多语言支持,应采用以下形式: http://www.example.com/en/bigcatiii/intercatA/articlex.html 但是,自从Joomla婴儿版以来,许多其他安装了Joomla并要求解决方案的用户,我得到了: h
Joomla 3.3.6
(编辑:3.5.
)网站,只组织了3个级别:
- 四大类(一、二、三、三)
- 每一个都分为一些中间类别(A、B、C等)
- 最后是文章
- 两种语言(英语、普通话)
搜索引擎友好URL
后的URL
,使用URL重写
,为URL添加后缀
和多语言支持
,应采用以下形式:
http://www.example.com/en/bigcatiii/intercatA/articlex.html
但是,自从Joomla婴儿版以来,许多其他安装了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的数字是不同的。而整个URL是
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]
URL
显示正常,但找不到页面。如果我们能够提供一个使用.htaccess而不是更改Joomla core的解决方案,那就更好了
不过,如果谷歌的另一个建议是有效的,那么更换Joomla core就可以了
Copy “components/com_content/router.php” to “/templates/your-template/html”
这意味着,一旦您将router.php
移动到“本地”,您就不需要在升级后重做所有内容。(当然,除非更新了router.php,否则最好再次镜像它。)
感谢您抽出时间来解决这个难题
参考资料
RewriteEngine on
RewriteBase /
RewriteRule (\d+)-([^/]*) $2 [R=301,L]
编辑(2016/5/02):Joomla的新赏金最新版本3.5查看后,我发现了一些有用的信息免责声明我不使用Joomla,也没有在工作安装上尝试过,这些只是一些搜索和阅读源代码的结果。不管怎样,这是我发现的 从我收集的资料来看,似乎
$advanced = $params->get('sef_advanced_link', 0);
到
应该足够了但是要小心,使用此选项,可能两个URL(带ID和不带ID)都可用,这对SEO不好。问题在于404,但这似乎是Joomla路由系统的问题。您可以使用仅配置但从未使用的菜单链接来补偿404(见下文)
您的问题的一些根源:
- 例如,在他们的路由中,他们使用菜单查找类别ID(
Line~385//
- 对于每个URL段(由/)分隔),它们首先搜索类别别名,因此一定要检查别名。如果在类别中找不到别名,他们将依赖URL中的ID进行搜索查询(
)Line~425->where($db->quoteName('catid')。='(int)$vars['catid'])
- 当categoryID或articleID附加到菜单时,它们会删除类别ID
,因为它们知道自己有唯一的全局别名(第69行)$query['catid']
- 关于这个问题的一些解决方案和解释的博客:
- joomla论坛讨论您的问题及其解决方案的帖子:
- 也许一些插件可以解决这个问题:
以一个明亮的音符结束,似乎;) 我刚刚安装了joomla 3.5,旧方法对我很有效。由于路由器文件中的某些内容已被修改,您必须在joomla升级后重复此过程 现在,
/components/com\u 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
可以很好地使用上的搜索引擎友好URL
通过向URL添加后缀
切换为是
将.html
附加到URL。使用URL重写
和Unicode别名
可以选择性地工作。在IIS7或Apache上使用URL重写引擎时,必须将htaccess.txt
重命名为.htaccess
并将webconfig.txt
重命名为webconfig
。请注意,某些主机具有限制性的服务器配置。如果出现500内部服务器错误
,您可能需要编辑.htaccess
并注释掉选项+后续符号链接
和/或