Just an example.
For wordpress ppl who changed their perm link.
Download: brokenlinkhelper.php
- <?php
- require_once( dirname(__FILE__) . '/wp-load.php' );
- global $wpdb;
- $uri = $_SERVER["REQUEST_URI"];
- $pattern = "/^\/(\d{4})\/(\d{2})\/(\d{2})\/([^\d].*|\d+[.^-]*).html$/";
- if (preg_match($pattern, $uri, $match) == 1)
- {
- $year = $match[1];
- $month = $match[2];
- $mday = $match[3];
- $post_name = $match[4];
- if ((string)(int)$post_name == $post_name) {
- $id = (int)$post_name;
- $link = get_permalink($id);
- if ($link)
- wp_redirect($link, '301'); // Permanent redirect
- }
- $query = "SELECT post_id FROM $wpdb->postmeta, $wpdb->posts WHERE ID=post_id ".
- "AND YEAR(post_date) = $year AND MONTH(post_date) = $month AND DAYOFMONTH(post_date) = $mday ".
- "AND post_name = \"$post_name\" LIMIT 1";
- $id = (int)$wpdb->get_var($query);
- $link = get_permalink($id);
- if ($link) wp_redirect($link, '301'); // Permanent redirect
- $query = "SELECT ID FROM $wpdb->posts WHERE ".
- "YEAR(post_date) = $year AND MONTH(post_date) = $month AND DAYOFMONTH(post_date) = $mday ".
- "AND post_name = \"$post_name\" LIMIT 1";
- $id = (int)$wpdb->get_var($query);
- $link = get_permalink($id);
- if ($link) wp_redirect($link, '301'); // Permanent redirect
- $link = "/$year/$month/$mday/";
- if (strstr($_SERVER["HTTP_USER_AGENT"], "Mozilla") === FALSE) // if it's not a user
- {
- wp_redirect($link, '302');
- }
- ?>
- <html><head>
- <meta http-equiv="refresh" content="5;url=<?php echo $link;?>" / > <title>Page has moved</title> </head>
- <body><p>The permant link changes, however <i>broken link helper</i> can't solve it automaticlly, it will redirect you to <a href="<?php echo $link;?>">the date archive page</a>. It would be nice if you can report broken links to feuvan#feuvan.net.</p>
- </body></html>
- <?php } ?>
Corresponding nginx configuration block:
server {
listen 80;
server_name blog.feuvan.net;root /home/feuvan/wwwdata/blog;
index index.php;
if (-e $request_filename) {
break;
}rewrite ^/index.php/(.+)$ /index.php?q=$1 last;
rewrite “^/([0-9]{4})/([0-9]{2})/([0-9]{2})/([^\d].*|\d+[.^-]*).html” /brokenlinkhelper.php last;
#rewrite ^/(.+)$ /index.php?q=$1 last;
rewrite ^/ /index.php last;location ~ \.php$ {
fastcgi_pass unix:/tmp/php.sock;
}
}
Hope it helps.













wow, your blog was reloaded!
Oh, it is so difficult for me, I didn’t have such mistake, but I think, if I would have, I cant correct it myself.
It is difficult to understand the cause but I think that now everyone cope with the emergence of such a mistake!
看来WP Hashcash也挡不住nb的spam
I am a beginner and for me this bug is not easy to fix. But I think need to try to receive.
wokao, quan-shi English, niubility!
This is all a bit difficult for me because I am still only beginning to understand all this!