2004-06-28 06:13:15

zem
Developer emeritus
omega
Real name: Alex
From: Melbourne, Australia
Website

[ORPHAN] zem_redirect

Hi,

Textpattern articles are currently reachable via several different URL paths. For example:

http://example.com/article/5/
http://example.com/article/5/article-title
http://example.com/article/5/old-article-title-before-i-renamed-it-to-something-shorter

External factors can multiply these (e.g. www.example.com vs. example.com).

This can cause problems with search engines and link aggregators, since they don’t have any way of knowing that all of these URLs represent the same page (as opposed to multiple pages with identical content).

txp:zem_redirect is designed to help reduce the problem a bit. It checks the URL used to fetch each article; if it doesn’t match the correct URL for the article (including the article-title and full hostname as specified in the Textpattern config), it’ll return a 301 Moved Permanently response to direct the user’s browser to the correct URL. It also works as a 404 handler for articles that don’t exist or are not visible.

Just plonk the tag <txp:zem_redirect /> at the top of your article page, and it’ll do the rest. It must be the very first tag on the page, before the doctype. It has no effect in messy URL mode, or on pages other than individual articles.

warning – if you’re already using URL rewriting or other clever redirection, there’s a chance this could cause circular redirects. Test carefully, and don’t say I didn’t warn ye.

http://vigilant.tv/documents/tp/zem_redirect-0.5.txt

z.

As this plugin is no longer supported we provide it here

YToxMDp7czo0OiJuYW1lIjtzOjEyOiJ6ZW1fcmVkaXJlY3QiO3M6NjoiYXV0aG9yIjtzOjExOiJBbGV4IFNoaWVscyI7czoxMDoiYXV0aG9yX3VyaSI7czoyNjoiaHR0cDovL3RocmVzaG9sZHN0YXRlLmNvbS8iO3M6NzoidmVyc2lvbiI7czo1OiIxLjIuMSI7czoxMToiZGVzY3JpcHRpb24iO3M6NTk6IlJlZGlyZWN0IFBybzogaGFuZGxlIGluY29ycmVjdCwgb3V0ZGF0ZWQgYW5kIGR1cGxpY2F0ZSBVUkxzIjtzOjQ6ImhlbHAiO3M6Mjk3OiI8cD5UaGlzIHBsdWctaW4ncyBoZWxwIGRvY3VtZW50cyBhcmUgYXZhaWxhYmxlIHRvIHBheWluZyBzdWJzY3JpYmVycyBvbmx5LiA8c3Ryb25nPk5ldyBzdWJzY3JpcHRpb25zIGFyZSBjdXJyZW50bHkgdW5hdmFpbGFibGUuPC9zdHJvbmc+IEN1cnJlbnQgc3Vic2NyaWJlcnMgY2FuIGFjY2VzcyB0aGUgaGVscCBkb2N1bWVudHMgYnkgdmlzaXRpbmc6IDxhIGhyZWY9Imh0dHA6Ly90aHJlc2hvbGRzdGF0ZS5jb20vc3Vic2NyaWJlcnMvICI+aHR0cDovL3RocmVzaG9sZHN0YXRlLmNvbS9zdWJzY3JpYmVycy8gPC9hPjwvcD4iO3M6NDoiY29kZSI7czo1NjcwOiIvKg0KDQpDb3B5cmlnaHQgMjAwNS0yMDA3IEFsZXggU2hpZWxzIGh0dHA6Ly90aHJlc2hvbGRzdGF0ZS5jb20vDQoNClRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3INCm1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlDQp2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uDQoNClRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLA0KYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YNCk1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUNCkdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuDQoNCiovDQoNCmZ1bmN0aW9uIHplbV9yZWRpcmVjdF9maXhfdXJsKCR1cmwsICRkZWJ1Zz0wKSB7DQoJJHBhcnRzID0gcGFyc2VfdXJsKCR1cmwpOw0KCWV4dHJhY3QoJHBhcnRzKTsNCgkkcSA9IHByZWdfcmVwbGFjZSgnQCZhbXA7QCcsICcmJywgQCRxdWVyeSk7DQoJJHEgPSAkcSA/ICc/Jy4kcSA6ICcnOw0KDQoJJGhvc3QgPSBlbXB0eSgkc2NoZW1lKSA/IHNlcnZlclNldCgnSFRUUF9IT1NUJykgOiAkaG9zdDsNCgkkc2NoZW1lID0gZW1wdHkoJHNjaGVtZSkgPyAnaHR0cCcgOiAkc2NoZW1lOw0KCSRwb3J0ID0gZW1wdHkoJHBvcnQpID8gJycgOiAnOicuJHBvcnQ7DQoNCglyZXR1cm4gJHNjaGVtZS4nOi8vJy4kaG9zdC4kcG9ydC4nLycubHRyaW0oJHBhdGgsICcvJykuJHE7DQp9DQoNCmZ1bmN0aW9uIHplbV9yZWRpcmVjdF9zZW5kX2hlYWRlcnMoJGxvY2F0aW9uLCAkdHlwZT0nJywgJGRlYnVnPTApIHsNCglnbG9iYWwgJHByZWZzLCAkcHJldGV4dDsNCglleHRyYWN0KCRwcmVmcyk7DQoNCglpZiAoJHByb2R1Y3Rpb25fc3RhdHVzID09ICdkZWJ1Zycgb3IgJGRlYnVnKSB7DQoJCWVjaG8gJzxkaXYgc3R5bGU9ImNvbG9yOiMwMDA7YmFja2dyb3VuZC1jb2xvcjojZmVlOyI+Jw0KCQkJLid6ZW1fcmVkaXJlY3Q6IGZyb20gPGEgaHJlZj0iJy4kcHJldGV4dFsncmVxdWVzdF91cmknXS4nIj4nLiRwcmV0ZXh0WydyZXF1ZXN0X3VyaSddLic8L2E+IHRvIDxhIGhyZWY9IicuJGxvY2F0aW9uLiciPicuJGxvY2F0aW9uLic8L2E+PC9kaXY+Jy5uOw0KCQlyZXR1cm4gJGxvY2F0aW9uOw0KCX0NCgllbHNlIHsNCgkJaWYgKCRwcm9kdWN0aW9uX3N0YXR1cyA9PSAnbGl2ZScpIHsNCgkJCWlmICghJHR5cGUpDQoJCQkJJHR5cGUgPSAnMzAxIE1vdmVkIFBlcm1hbmVudGx5JzsNCgkJfQ0KCQllbHNlDQoJCQkkdHlwZSA9ICczMDIgRm91bmQnOw0KDQoJCXR4cF9zdGF0dXNfaGVhZGVyKCR0eXBlKTsNCgkJaGVhZGVyKCJMb2NhdGlvbjogJGxvY2F0aW9uIik7DQoJCW9iX2ZsdXNoKCk7DQoJCWV4aXQ7DQoJfQ0KDQp9DQoNCg0KCWZ1bmN0aW9uIHplbV9yZWRpcmVjdF91cmwoJHRlc3Q9MCkgew0KCQlnbG9iYWwgJHByZXRleHQsICRzaXRldXJsLCAkcGF0aF9mcm9tX3Jvb3QsICRwcmVmczsNCg0KCQlleHRyYWN0KCRwcmVmcyk7DQoNCiAJCWlmIChlbXB0eSgkcGVybWxpbmtfbW9kZSkNCiAJCQlvciAkcGVybWxpbmtfbW9kZSA9PSAnbWVzc3knDQoJCQlvciBzdHJjYXNlY21wKHNlcnZlclNldCgnUkVRVUVTVF9NRVRIT0QnKSwgJ1BPU1QnKSA9PSAwDQoJCQlvciBncHMoJ3R4cHJldmlldycpKQ0KIAkJCXJldHVybjsNCg0KDQoJCSRhY3R1YWxfaG9zdCA9IHNlcnZlclNldCgiSFRUUF9IT1NUIik7DQoJCSRhY3R1YWxfcGF0aCA9ICgkdGVzdCAhPT0gMCA/ICR0ZXN0IDogJHByZXRleHRbJ3JlcXVlc3RfdXJpJ10pOw0KCQkkYWN0dWFsX3VybCA9ICdodHRwOi8vJy4kYWN0dWFsX2hvc3QuJGFjdHVhbF9wYXRoOw0KCQkkY2Fub25pY2FsX3VybCA9ICcnOw0KDQoJCSMgb3RoZXIgdW5rbm93biBxdWVyeSBwYXJhbWV0ZXJzIG1pZ2h0IGJlIHVzZWQgYnkgcGx1Z2lucw0KCQkkZ2V0ID0gZ3BzYShhcnJheV9rZXlzKCRfR0VUKSk7DQoJCWlmICghJGdldCkgJGdldCA9IGFycmF5KCk7DQoJCXVuc2V0KCRnZXRbJ2lkJ10pOw0KCQl1bnNldCgkZ2V0WydzJ10pOw0KCQl1bnNldCgkZ2V0WydjJ10pOw0KDQoJCS8vIHJlbW92ZSBib2d1cyBHRVQgcGFyYW1hdGVycyBpbnNlcnRlZCBieSByc3NfdW5saW1pdGVkX2NhdGVnb3JpZXMNCgkJZ2xvYmFsICRwbHVnaW5zOw0KCQlpZiAoQGluX2FycmF5KCdyc3NfdW5saW1pdGVkX2NhdGVnb3JpZXMnLCAkcGx1Z2lucykpIHsNCgkJCXVuc2V0KCRnZXRbJ3JlcXVlc3RfdXJpJ10pOw0KCQkJdW5zZXQoJGdldFsncXMnXSk7DQoJCX0NCg0KCQlpZiAoZ3BzKCdhdG9tJykgb3IgZ3BzKCdyc3MnKSkgew0KCQkJJGNhbm9uaWNhbF91cmwgPSBwYWdlbGlua3VybCgkZ2V0KTsNCgkJfQ0KCQllbHNlaWYgKCRwcmV0ZXh0WydzdGF0dXMnXSA9PSA0MDQpIHsNCgkJCS8vIHVybCB3aXRoIHN1YmRpciBzdHJpcHBlZA0KCQkJJHVybCA9IEAkcHJldGV4dFsncmVxJ107DQoNCgkJCWlmIChwcmVnX21hdGNoKCdALyhcZHs0fSkvKFxkezJ9KS8oXGR7Mn0pLyhbXi8/XSopLz9AJywgJHVybCwgJG0pKSB7DQoJCQkJJHdoZW4gPSAkbVsxXS4nLScuJG1bMl0uJy0nLiRtWzNdOw0KCQkJCSRycyA9IGxvb2t1cEJ5RGF0ZVRpdGxlKCR3aGVuLCRtWzRdKTsNCgkJCQlpZiAoISRycykNCgkJCQkJJHJzID0gbG9va3VwQnlUaXRsZSgkbVs0XSk7DQoJCQl9DQoJCQllbHNlaWYgKHByZWdfbWF0Y2goJ0AvKFteL10rKS8oXGQrKS8oW14vP10rKS8/QCcsICR1cmwsICRtKSkgew0KCQkJCSRycyA9IGxvb2t1cEJ5SUQoJG1bMl0pOw0KCQkJfQ0KCQkJZWxzZWlmIChwcmVnX21hdGNoKCdALyhbXi8/XSspLyhbXi8/XSspLz9AJywgJHVybCwgJG0pKSB7DQoJCQkJaWYgKGlzX251bWVyaWMoJG1bMl0pKQ0KCQkJCQkkcnMgPSBsb29rdXBCeUlEKCRtWzJdKTsNCgkJCQllbHNlIHsNCgkJCQkJJHJzID0gbG9va3VwQnlUaXRsZVNlY3Rpb24oJG1bMl0sICRtWzFdKTsNCgkJCQkJaWYgKCEkcnMpDQoJCQkJCQkkcnMgPSBsb29rdXBCeVRpdGxlKCRtWzJdKTsNCgkJCQl9DQoJCQl9DQoJCQllbHNlaWYgKHByZWdfbWF0Y2goJ0AvKFteLz9dKykvP0AnLCAkdXJsLCAkbSkpIHsNCgkJCQkkcnMgPSBsb29rdXBCeVRpdGxlKCRtWzFdKTsNCgkJCX0NCg0KCQkJaWYgKCRycykgew0KCQkJCSRjYW5vbmljYWxfdXJsID0gcGVybWxpbmt1cmxfaWQoJHJzWydJRCddKSAuIGpvaW5fcXMoJGdldCk7DQoJCQl9DQoJCQllbHNlIHsNCgkJCQlyZXR1cm47DQoJCQl9DQoJCX0NCgkJZWxzZWlmICgkcHJldGV4dFsncyddID09ICdmaWxlX2Rvd25sb2FkJykgew0KCQkJcmV0dXJuOw0KCQl9DQoJCWVsc2VpZiAoJHByZXRleHRbJ21vbnRoJ10gYW5kICRwZXJtbGlua19tb2RlID09ICd5ZWFyX21vbnRoX2RheV90aXRsZScpIHsNCgkJCXJldHVybjsNCgkJfQ0KCQllbHNlaWYgKCRwcmV0ZXh0WyJpZCJdKSB7DQoJCQkjIEFydGljbGUgcGFnZQ0KCQkJJHBhcnRzID0gcGFyc2VfdXJsKCRwcmV0ZXh0WydyZXEnXSk7DQoJCQlpZiAoaXNzZXQoJHBhcnRzWydwYXRoJ10pKSB7DQoJCQkJJHBhdGhpbmZvID0gcGF0aGluZm8oJHBhcnRzWydwYXRoJ10pOw0KCQkJCWlmICghZW1wdHkoJHBhdGhpbmZvWydleHRlbnNpb24nXSkgYW5kICRwYXRoaW5mb1snYmFzZW5hbWUnXSAhPSAnaW5kZXgucGhwJykgew0KCQkJCQlyZXR1cm47DQoJCQkJfQ0KCQkJfQ0KCQkJJGlkID0gc2FmZV9maWVsZCgiSUQiLCJ0ZXh0cGF0dGVybiIsIklEPSciLmRvU2xhc2goJHByZXRleHRbImlkIl0pLiInIGFuZCBTdGF0dXMgSU4gKCc0JywgJzUnKSBsaW1pdCAxIik7DQoJCQlpZiAoJGlkKSB7DQoJCQkJJGNhbm9uaWNhbF91cmwgPSBwZXJtbGlua3VybF9pZCgkaWQpOw0KCQkJfQ0KDQoJCQkjIHJlYXR0YWNoIG1lc3N5IFVSTCBwYXJhbWV0ZXJzLCBpZiBhbnkNCgkJCSRjYW5vbmljYWxfdXJsIC49IGpvaW5fcXMoJGdldCk7DQoJCX0NCgkJZWxzZSB7DQoJCQkjIExpc3QgcGFnZQ0KCQkJJGNhbm9uaWNhbF91cmwgPSBwYWdlbGlua3VybCgkZ2V0LCBhcnJheSgncyc9PiRwcmV0ZXh0WydzJ10sICdjJz0+JHByZXRleHRbJ2MnXSkpOw0KCQl9DQoNCgkJaWYgKCRjYW5vbmljYWxfdXJsKSB7DQoNCgkJCSMgZml4IHVwIGFtcGVyc2FuZHMNCgkJCSRjYW5vbmljYWxfdXJsID0gemVtX3JlZGlyZWN0X2ZpeF91cmwoJGNhbm9uaWNhbF91cmwpOw0KCQkJaWYgKCRhY3R1YWxfdXJsICE9ICRjYW5vbmljYWxfdXJsKSB7DQoJCQkJcmV0dXJuIHplbV9yZWRpcmVjdF9zZW5kX2hlYWRlcnMoJGNhbm9uaWNhbF91cmwsICczMDEgTW92ZWQgUGVybWFuZW50bHknLCAkdGVzdCAhPT0gMCk7DQoJCQl9DQoJCX0NCg0KCX0NCg0KDQpmdW5jdGlvbiB6ZW1fcmVkaXJlY3RfaGFuZGxlcigkZXZlbnQsICRzdGVwKSB7DQoJaWYgKCRldmVudCA9PSAndGV4dHBhdHRlcm4nKQ0KCQl6ZW1fcmVkaXJlY3RfdXJsKCk7DQp9DQoNCnJlZ2lzdGVyX2NhbGxiYWNrKCd6ZW1fcmVkaXJlY3RfaGFuZGxlcicsICd0ZXh0cGF0dGVybicpOw0KDQppZiAodHhwaW50ZXJmYWNlID09ICdwdWJsaWMnIGFuZCAoZ3BzKCdhdG9tJykgb3IgZ3BzKCdyc3MnKSkpIHsNCgl6ZW1fcmVkaXJlY3RfdXJsKCk7DQp9DQoNCg0KZnVuY3Rpb24gemVtX3JlZGlyZWN0KCRhdHRzKSB7DQoJZ2xvYmFsICRwcmV0ZXh0Ow0KDQoJZXh0cmFjdChsQXR0cyhhcnJheSgNCgkJJ3RvJyA9PiAnJywNCgkJJ2Zyb20nID0+ICcnLA0KCQknZGVidWcnID0+IDAsDQoJCSd0eXBlJyA9PiAnMzAyJywNCgkpLCAkYXR0cykpOw0KDQoJJHRvID0gdHJpbSgkdG8pOw0KCSRmcm9tID0gdHJpbSgkZnJvbSk7DQoNCg0KCSRkZXN0ID0gJyc7DQoJaWYgKCRmcm9tIGFuZCAkdG8pIHsNCgkJJGZyb20gPSBhZGRjc2xhc2hlcygkZnJvbSwgJ0AnKTsNCgkJJHRvID0gYWRkY3NsYXNoZXMoJHRvLCAnQCcpOw0KCQlpZiAocHJlZ19tYXRjaCgnQCcuJGZyb20uJ0AnLCAkcHJldGV4dFsncmVxdWVzdF91cmknXSkpIHsNCgkJCSRvdXQgPSBwcmVnX3JlcGxhY2UoJ0AnLiRmcm9tLidAJywgJHRvLCAkcHJldGV4dFsncmVxdWVzdF91cmknXSk7DQoJCQkkZGVzdCA9IHplbV9yZWRpcmVjdF9maXhfdXJsKCRvdXQsICRkZWJ1Zyk7DQoJCX0NCgl9DQoJZWxzZWlmICgkdG8pIHsNCgkJJGRlc3QgPSB6ZW1fcmVkaXJlY3RfZml4X3VybCgkdG8sICRkZWJ1Zyk7DQoJfQ0KCWVsc2Ugew0KCQl0cmlnZ2VyX2Vycm9yKCdObyBkZXN0aW5hdGlvbiBzcGVjaWZpZWQnKTsNCgl9DQoNCgkkYWN0dWFsX2hvc3QgPSBzZXJ2ZXJTZXQoIkhUVFBfSE9TVCIpOw0KCSRhY3R1YWxfcGF0aCA9ICgkdGVzdCAhPT0gMCA/ICR0ZXN0IDogJHByZXRleHRbJ3JlcXVlc3RfdXJpJ10pOw0KCSRhY3R1YWxfdXJsID0gJ2h0dHA6Ly8nLiRhY3R1YWxfaG9zdC4kYWN0dWFsX3BhdGg7DQoNCglpZiAoJGRlc3QgYW5kICRkZXN0ICE9ICRhY3R1YWxfdXJsKSB7DQoJCSRzdGF0dXMgPSAoJHR5cGUgPT0gJzMwMScgPyAnMzAxIE1vdmVkIFBlcm1hbmVudGx5JyA6ICczMDIgRm91bmQnKTsNCgkJcmV0dXJuIHplbV9yZWRpcmVjdF9zZW5kX2hlYWRlcnMoJGRlc3QsICRzdGF0dXMsICRkZWJ1Zyk7DQoJfQ0KDQp9DQoiO3M6NDoidHlwZSI7czoxOiIwIjtzOjU6Im9yZGVyIjtzOjE6IjUiO3M6MzoibWQ1IjtzOjMyOiJkM2UzNjRiZTY2NWNkODNjNTIxZWFmODdiMjQ3NDMyZiI7fQ==

Last edited by zem (2004-07-10 02:53:25)


Alex
tstate

Offline

 

2004-06-28 06:55:06

Sencer
Developer emeritus
omega
From: cgn, de
Known languages: de, en, tr
Website

Re: [ORPHAN] zem_redirect

Hi zem,

thank you very much. That sounds like a great plugin. :)

I’ll definitely give it a try.

Offline

 

2004-06-28 17:13:10

ramanan
Plugin Author
iota
Real name: Ramanan Sivaranjan
From: Toronto
Website

Re: [ORPHAN] zem_redirect

This is a great idea for a plugin. I can’t wait to try it out as well.

Offline

 

2004-06-28 21:12:54

DougBTX
Plugin Author
beta

Re: [ORPHAN] zem_redirect

belle

Offline

 

2004-06-28 22:54:32

ChrisJ
Member
delta
Real name: Chris
From: Vienna, Austria
Known languages: en, de, pl
Website

Re: [ORPHAN] zem_redirect

works great! no more ‘redirect 301’! thanks, zem!

Offline

 

2004-07-04 01:14:50

zem
Developer emeritus
omega
Real name: Alex
From: Melbourne, Australia
Website

Re: [ORPHAN] zem_redirect

There’s a new version up:

http://vigilant.tv/documents/tp/zem_redirect-0.2.txt

Changes in this version:

  • Now supports the article URL title feature
  • Works with section and default pages (adds a trailing slash if neccesary, etc)

Last edited by zem (2004-07-04 01:15:05)


Alex
tstate

Offline

 

2004-07-04 01:41:40

zem
Developer emeritus
omega
Real name: Alex
From: Melbourne, Australia
Website

Re: [ORPHAN] zem_redirect

And again:

http://vigilant.tv/documents/tp/zem_redirect-0.3.txt

Changes:

  • Returns a 404 response for non-existant or unpublished articles
  • Calls exit() immediately after redirect or 404, to stop further output

Alex
tstate

Offline

 

2004-07-04 05:59:20

ThrokFeroth
Member
beta
Real name: MH
From: Malaysia
Website

Re: [ORPHAN] zem_redirect

I can’t seem to get it to work. The thing keeps on redirecting itself whenever i try to access an individual article. Any ideas?

Offline

 

2004-07-04 09:46:35

mamash
Admin
zêta
Real name: Filip Hajny
From: Prague
Known languages: cz, en, ru, de, fr
Website

Re: [ORPHAN] zem_redirect

Excellent plugin, zem. You might want consider letting people specify an article number (through a plugin parameter, preferably) containing an error message and redirect to it in case of a 404.

Also, you should check for ‘query’ index in a way that doesn’t generate the ‘Undefined indexes’ notice, e. g.

if (!empty($parts["query"]))


Who’s gonna textdrive you home tonight?

Offline

 

2004-07-05 02:11:49

zem
Developer emeritus
omega
Real name: Alex
From: Melbourne, Australia
Website

Re: [ORPHAN] zem_redirect

ThrokFeroth, do you have any other URL redirection or rewriting configured? Is your “web domain” setting correct?

Mamash – thanks for the suggestions. I’ll put together a new version that supports a few attributes to control its behaviour.


Alex
tstate

Offline

 

Powered by FluxBB