Textpattern Forum

You are not logged in. Register | Login | Help

#1 2004-06-28 06:13:15

zem
Developer emeritus
From: Melbourne, Australia
Registered: 2004-04-08
Posts: 2,579
Website

[plugin] [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

#2 2004-06-28 06:55:06

Sencer
Developer emeritus
From: cgn, de
Registered: 2004-03-23
Posts: 1,803
Website

Re: [plugin] [ORPHAN] zem_redirect

Hi zem,

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

I’ll definitely give it a try.

Offline

#3 2004-06-28 17:13:10

ramanan
Plugin Author
From: Toronto
Registered: 2004-03-12
Posts: 323
Website

Re: [plugin] [ORPHAN] zem_redirect

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

Offline

#4 2004-06-28 21:12:54

DougBTX
Plugin Author
Registered: 2004-05-23
Posts: 22

Re: [plugin] [ORPHAN] zem_redirect

belle

Offline

#5 2004-06-28 22:54:32

ChrisJ
Member
From: Vienna, Austria
Registered: 2004-03-30
Posts: 54
Website

Re: [plugin] [ORPHAN] zem_redirect

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

Offline

#6 2004-07-04 01:14:50

zem
Developer emeritus
From: Melbourne, Australia
Registered: 2004-04-08
Posts: 2,579
Website

Re: [plugin] [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

#7 2004-07-04 01:41:40

zem
Developer emeritus
From: Melbourne, Australia
Registered: 2004-04-08
Posts: 2,579
Website

Re: [plugin] [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

#8 2004-07-04 05:59:20

ThrokFeroth
Member
From: Malaysia
Registered: 2004-02-28
Posts: 12
Website

Re: [plugin] [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

#9 2004-07-04 09:46:35

mamash
Admin
From: Prague
Registered: 2004-02-21
Posts: 124
Website

Re: [plugin] [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

#10 2004-07-05 02:11:49

zem
Developer emeritus
From: Melbourne, Australia
Registered: 2004-04-08
Posts: 2,579
Website

Re: [plugin] [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

Board footer

Powered by FluxBB