For the last few minutes, I have been trying to figure out why next_posts_link() did not work on a template for a clients’ blog, under IIS.
I found a great tip, but I prefer standard functions over things that work.
Then I found out under IIS, PHP returns a wrong value for $_SERVER["REQUEST_URI"]. The link to the previous page was index.php/Index.php/page/2/. Notice there are two “index.php” (for Windows, index and Index are just the same.)
The real, working, clean and easy solution is to add a simple line of code in the clean_url() function in wp-includes/formatting.php:
$url = str_replace('index.php/Index.php','index.php',$url);
just put this at the beginning of the function before any “if Statements” only thing is you have to remember to do this again if you upgrade word press.
Source – http://wordpress.org/support/topic/202348