使用类似于内容的链接管理内部或外部URL的重定向
项目描述
使用类似于内容的链接管理内部或外部URL的重定向。在Products.redirectiontool或plone.app.redirector仅处理门户内部的重定向时,collective.redirect允许重定向到外部URL。重定向路径的管理使用重定向内容类型的实例。重定向的路径与重定向实例的路径独立,有以下几个原因。
首先,由于门户对象不是一个基于BTree的文件夹,如果添加太多对象,它将开始表现不佳。允许重定向路径独立于重定向实例的位置,可以在门户根目录中放置很多重定向而不放置太多对象。
其次,路径独立于重定向实例位置,允许用户为无法添加内容的路径创建重定向。请注意,这可能会对您的网站造成负面影响,并且很可能会被滥用于某种形式的拒绝服务攻击。
如果存在针对同一路径的多个重定向,则将优先选择发布日期较近的那个。最后,重定向永远不会覆盖可访问的URL。换句话说,重定向不能覆盖实际的内容对象、皮肤对象、视图或其他可访问项。重定向仅在会引发NotFound错误的情况下才会发生。
请使用浏览器。
>>> from Products.Five import testbrowser >>> browser = testbrowser.Browser() >>> portal.error_log._ignored_exceptions = () >>> portal_url = portal.absolute_url()
在添加重定向之前,访问不存在的URL将返回404页面。
>>> 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
具有两个或更多不存在段落的本地路径不起作用,因为遍历在第一个不存在段落下停止,然后request.URL将返回此截断的路径,因此查询目录时不会产生匹配项。已将视图更改为使用ACTUAL_URL,它确实会返回实际使用的URL。
0.4 - 2009-06-03
回退到plone的标准_error_message被AQ包裹在plone_templates皮肤文件夹中,因此忽略了皮肤优先级,例如,不允许覆盖default_error_message。
0.3 - 2008-11-14
添加对VHM的支持
0.2 - 2008-11-12
删除开发中的意外提交
0.1 - 2008-11-11
首次发布
项目详情
collective.redirect-0.5.tar.gz的散列
算法 | 散列摘要 | |
---|---|---|
SHA256 | 85d900e421c1ca431aa39dfb8945f8ddb5f1af27e83e5472b0803d6efee47527 |
|
MD5 | 14d91ed432920823cdb351eec6f919f6 |
|
BLAKE2b-256 | e620ddb8bc72d9d18947f2dea9c8973a13b0bd36d83604e4be79e72378ee344d |