Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/261.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 从URL中删除ID(类别和文章)(Joomla 3.3/3.4/3.5)_Php_.htaccess_Joomla_Joomla3.3_Joomla3.4 - Fatal编程技术网

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
    $query['catid']
    ,因为它们知道自己有唯一的全局别名(第69行)
因此,一种解决方案是执行以下操作:

您可以尝试为每个类别和每篇文章创建一个菜单项。即使菜单没有显示在任何地方,并且仅在管理界面中配置,它也会为类别和文章创建全局唯一的路由别名,从而让Joomla找到正确的文章/类别。据我所知,当一个类别或文章有一个菜单项时,只使用标题别名。但是,由于他们没有,所以他们使用id+slug组合来定位资源

因为很多人都在抱怨这个问题,所以应该在Joomla 3.5中修复它

参考和讨论:

  • 关于这个问题的一些解决方案和解释的博客:
  • 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
并注释掉
选项+后续符号链接
和/或