管理使用类似链接的内容重定向到内部或外部URL
collective.redirect的Python项目详细描述
管理使用类似链接的内部或外部URL重定向 内容仅限Products.redirectiontool或plone.app.redirector 处理重定向到门户内部的内部url, collective.redirect允许重定向到外部URL。这个 使用重定向实例管理要重定向的路径 内容类型。重定向的路径独立于 重定向实例的路径有两个原因。
首先,由于portal对象不是基于btree的文件夹,它将 如果添加了太多对象,则开始表现不佳。允许 独立于重定向位置的重定向路径 实例允许许多重定向而不放置太多对象 在门户根目录中
其次,路径独立于重定向实例 位置允许用户为无法重定向的路径创建重定向 也添加内容。记住这对你的 当然也可以被滥用为DoS攻击。
如果对于同一路径存在多个重定向,则具有更多重定向的重定向 最新出版日期为准。最终重定向将 永远不要重写可遍历的url。听着,重定向不能 覆盖实际的内容对象、外观对象、视图或任何其他内容 穿越。只有当NotFound错误 否则将被提起。
使用浏览器
<>在添加重定向之前,返回不存在的URL将返回 404页。>>> from Products.Five import testbrowser >>> browser = testbrowser.Browser() >>> portal.error_log._ignored_exceptions = () >>> portal_url = portal.absolute_url()
>>> browser.open(portal_url+'/foo') Traceback (most recent call last): HTTPError: HTTP Error 404: Not Found>>> browser.open(portal_url+'/bar') Traceback (most recent call last): HTTPError: HTTP Error 404: Not Found
打开另一个浏览器并以可以添加重定向的用户身份登录。
>>> from Products.PloneTestCase import ptc >>> member_browser = testbrowser.Browser() >>> member_browser.handleErrors = False >>> member_browser.open(portal.absolute_url()) >>> member_browser.getLink('Log in').click() >>> member_browser.getControl( ... 'Login Name').value = ptc.default_user >>> member_browser.getControl( ... 'Password').value = ptc.default_password >>> member_browser.getControl('Log in').click() >>> member_browser.open(portal_url+'/Members/test_user_1_')
添加重定向将“本地路径”字段设置为 已从重定向。本地路径始终位于入口套 “url”字段指向应重定向到的url。
>>> member_browser.getLink(url='createObject?type_name=Redirect').click() >>> member_browser.getControl('Title').value = 'Foo Redirect Title' >>> member_browser.getControl('Local Path').value = '/foo' >>> member_browser.getControl('URL').value = '/plone/events' >>> member_browser.getControl('Save').click() >>> print member_browser.contents <... ...Changes saved... ...Foo Redirect Title... ...Local Path... .../foo... ...URL... .../events...
当访问本地的用户无法访问重定向时 路径,例如当重定向的工作流禁止它时, 不会发生重定向。
>>> foo_redirect = portal.Members.test_user_1_['foo-redirect-title'] >>> portal.portal_workflow.getInfoFor( ... foo_redirect, 'review_state') 'private' >>> browser.open(portal_url+'/foo') Traceback (most recent call last): HTTPError: HTTP Error 404: Not Found
一旦可以访问重定向,访问本地路径的用户 已重定向到远程URL。
>>> self.loginAsPortalOwner() >>> portal.portal_workflow.doActionFor(foo_redirect, 'publish') >>> self.logout()
使用VHM样式的URL来模拟虚拟主机环境
>>> browser.open('http://nohost/VirtualHostBase/http/nohost' ... '/VirtualHostRoot/plone/foo/') >>> browser.url 'http://nohost/plone/events'
没有重定向的本地路径仍然返回404页。
>>> browser.open(portal_url+'/bar') Traceback (most recent call last): HTTPError: HTTP Error 404: Not Found
变更日志
0.5-2010年11月10日
-
LI>两个或多个不存在段的局部路径不起作用,
因为遍历在第一个不存在的段停止,然后
request.url将返回此截断的路径,因此没有匹配的
查询目录时的结果。已将视图更改为使用实际的URL
而是返回实际使用的url。
0.4-2009-06-03
- 对plone的标准错误消息的回退是aq包装在 plone_模板皮肤文件夹,以便皮肤优先级 忽略,例如,不允许重写 默认错误信息
0.3-2008年11月14日
- 添加对VHM的支持
0.2-2008年11月12日
- 从开发中删除意外提交
0.1-2008年11月11日
- 初次发行