发布遍历期间不获取
项目描述
简介
“获取”和publishTraverse的问题在于当前方法返回了过多不同的URL来访问相同的内容。例如,以下是plone.org网站“kb”页面的潜在URL之一
…
以下是具有两个内容项“a”和“b”(可折叠或不可折叠)的通用“Plone”站点
…
所有上述URL都返回200状态码并显示相同的内容,而我希望“规范URL”返回200状态码,其他则返回404状态码。
上述行为构成了一个问题,因为
相同内容的多个URL对于SEO来说是一个问题,并且会让人困惑。对于SEO,Plone在最新版本中引入了规范META,但据我观察,这只是权宜之计。人们感到困惑。例如:有时我的编辑会问我:“我不能删除http://example.com/Plone/a/b/a/page。你能帮我吗?”
在所有URL上页面看起来并不完全相同:如果您打开https://plone.org/documentation/kb和https://plone.org/documentation/manual/kb,第二个页面有一个第一个页面缺少的组件
从外部缓存(如varnish或squid)中删除页面(例如,在内容修改后),将会很麻烦。这是因为对于相同的内容,可能存在多个URL,没有任何控制或规则(《collective.purgebyid》可以解决这个问题)
当使用子站(或在同一Zope应用程序上的多个Plone站点)时,问题更加讨厌:假设“a”是http://a.example.org的子站(标记为INavigationRoot),而“b”是http://b.example.org。打开URLhttp://a.example.org/b可能会在“b”站点内显示站点“a”的首页。《collective.siteisolation》和可能《collective.lineage》会做些事情来隔离子站,但在我看来,这些仍然是权宜之计。
使用方法
这是对Zope2的《ZPublisher.BaseRequest.DefaultPublishTraverse》方法的一个猴子补丁,以及《Products.Archetypes.BaseObject.BaseObject.__bobo_traverse__》的一个猴子补丁
默认情况下,无效的遍历仅记录为警告。
要启用引发异常,您需要手动修改《config.py》,将《DRYRUN》更改为《False》。
或使用《plone.recipe.zope2instance >= 4.2.14》,例如。
[instance] recipe = plone.recipe.zope2instance eggs = experimental.noacquisition ... initialization = from experimental.noacquisition import config config.DRYRUN = False
警告
自行承担风险使用
如果您不知道自己在做什么,请不要使用它……至少使用《DRYRUN = True》。
测试
此附加组件使用Travis CI进行测试。该附加组件的当前状态为
其他解决方案
在《Products.CMFPlone》的一个分支中有一个更优雅的解决方案,它使用IPubAfterTraversal事件而不是猴子补丁。但似乎目前它并不适用于所有情况,至少当请求结束时存在自定义遍历时(请查看此包内的测试)。https://github.com/plone/Products.CMFPlone/tree/publication-through-explicit-acquisition
还有其他与CMFPlone分支相同方法的包:《collective.explicitacquisition》和《collective.redirectacquired》。
变更日志
1.0.0b10 (2023-02-09)
Zope < 6(无更改)[daniele-andreotti]
1.0.0b9 (2020-07-02)
Zope < 5(无更改)[mamico]
1.0.0b7 (2019-12-10)
Zope < 4.2(无更改)[mamico]
1.0.0b6 (2019-11-07)
Python3 Plone 5.2 [mamico]
1.0.0b5 (2019-06-05)
Zope2 2.13.28(无更改)[mamico]
1.0.0b4 (2018-05-14)
Zope2 2.13.27(无更改)[mamico]
1.0.0b3 (2017-05-09)
Zope2 2.13.26(无更改)[mamico]
1.0.0b2 (2016-06-10)
Zope2 2.13.24 [mamico]
1.0.0b1 (2015-10-23)
Zope2 2.13.23(Plone 4.3.7/5.0)[mamico]
1.0.0a5 (2014-10-31)
目前尚无更改。
1.0.0a4 (2014-10-31)
首次发布