Case-sensitive SEO URL redirects and routing for IIS and ASP.NET MVC

At NeoSmart Technologies, we have a special affinity for ecosystems running both Windows and *nix in unison, each doing things they excel at. Half of this website is running ASP.NET MVC under IIS 8.0, while the other half is running under nginx on FreeBSD, everything behind an nginx reverse proxy. Windows likes to make things easy for users by being a primarily case-insensitive platform, both when it comes to the local filesystem and the web. FreeBSD and Linux on the other hand, like most of the unix world1 are explicitly and unapologetically case-sensitive.

On the one-hand, IIS defaulting to case-insensitive URL routing means that your users are far less likely to a see a 404 “Page not found” error as a result of a fat-fingered or mangled URL (which as we all know can be the fault of either the user or the developer), but it also means that when Google’s spiders and ‘bots come around looking to index your content, you’re likely to wind up penalized for having duplicate content. The web itself is officially case-insensitive, and technically both example.com/something and example.com/Something are completely separate, unique, and independent URLs that despite all semantical similarities share nothing in common (though you’d be mad to actually host different content on URLs differing only in spelling).

Welcome SeoRedirect, part of NeoSmart Technologies’ open-sourced Web Toolkit library, which provides case-sensitive routing for ASP.NET on IIS. With the latest update (freshly pushed!), SeoRedirect also gives you control over which GET parameters are also preserved, because apparently worrying about case-sensitivity alone just isn’t enough.

Continue reading


  1. Mac OS X is a notable exception here, as by default it uses HFS+ in a case-insensitive mode, though an HFS+ implementation w/ case-sensitivity is enabled (but rarely used). 

Request_URI For IIS Updated with ISAPI_Rewrite 3 Support

Request_URI for IIS, NeoSmart Technologies’ compatibility toolkit for IIS on Windows, has been updated to version 1.1, with support for Helicon’s ISAPI_Rewrite 3.x

With this update the installation process has been simplified somewhat, in particular the need modify HTTPD.INI to set the server variables has been eliminated – you just need to install ISAPI_Rewrite 3, configure php.ini to load up request_uri.inc, and you’re set.

Request_URI for Windows 1.1 retains backwards compatibility with ISAPI_Rewrite 2.x for those of you who’d rather not switch to the new (and much-improved) version 3.x.

Continue reading

Microsoft FastCGI Updated – But Should You Upgrade?

We previously covered the final release of the IIS FastCGI module, jointly developed between Microsoft and Zend… But just this week, Microsoft [[MSFT]] announced the availability of the RTM of the IIS FastCGI module.

So what’s going on? We’ve downloaded the current release (which, by the way, is not compatible with the old one, you must uninstall then install the new version) and checked the version number on \Windows\System32\inetsrv\fcgiext.dll – it came out to be 6.1.36.1.

By contrast, the version we downloaded and installed a month ago (which seems to have been dubbed the Go Live release) was checked and found to be 7.0.6001.16606.

Obviously the Go Live release was using the numbering from the Microsoft Windows Server 2008 releases, but it’s got us confused.

Continue reading

Server Move Completed – NeoSmart Technologies Fully Optimized!

We’ve been working on moving to a new server all week, and we’ve just finished the transition. Best of all, we’ve switched to the new servers without any downtime in-between. Our new server is a 1.86 GHz Core 2 Duo and with 3GB of DDR2 RAM – all thanks to the awesome guys and gals at Lunarpages, the best host there is.

A lot of work has gone into this transition in hopes of raising the performance – and more importantly, the reliability – of our server. In the past year (since we first started our hosting with LP), we’ve gone from several million hits a month to dozens of millions, and our old server took quite a hit. To that end, we’ve focused on deploying lightweight and highly-optimized code all around; hopefully there will be no more un-expected downtime… ever.

Our current software setup is very complicated, but hopefully it’ll take us all the way to 0.00 minutes of downtime – that’s our goal! We have multiple application servers and programs running in the background each doing what they best – instead of the traditional have-the-web-server-do-it-all way. At the moment, we currently have a software stack comprising of a tightly-knit mesh of these products:

Continue reading

FastCGI for IIS Final Released, Congratulations to the IIS Team!

Congratulations are in order for Microsoft’s IIS development team – today they’ve just announced the public availability of the final version of the IIS-FastCGI ISAPI Extension – a long-awaited and much-improved way of running just about any open-source scripting engine on IIS, safely and quickly.

The Microsoft [[MSFT]] FastCGI module for IIS 5.1, 6, and 7 (with Windows Vista and Server 2008) have been in the works for quite a while now, and we’ve been using them since the first beta release – they’re good. While the biggest benefit will be seen in using FastCGI w/ IIS7 to take advantage of the new kernel-mode caching, it’s still a huge improvement over the old way of running scripting engines for languages like PHP on Windows.

The Problem: Most open-source scripting engines like PHP and Ruby on Rails were initially developed on/for the *nix world. On Unix-based platforms, the easiest way of creating multi-threaded applications is just to run the same app twice or more (The CGI model). On Windows, that doesn’t work out so well, because it takes a lot more resources to create another process. So these engines released Windows-specific single-process multi-threaded engines; the only problem was, they weren’t stable. Too many race conditions in some very non-thread-safe code wreaked havoc on many Windows systems, with the PHP developers themselves giving “Stability on IIS” the lowest level of concern.

Continue reading

eAccelerator PHP Extension Isn’t Thread-Safe…

For all the Windows-bound PHP users out there, consider yourselves warned: even if you’re running the (supposedly) thread-safe PHP Win32 binary redistribution, you’re still susceptible to PHP Access Violation Errors, race problems, heap corruption, and much worse if you use the popular eAccelerator opcode-caching extension.

We did our testing with the binaries compiled by SiteBuddy using the latest versions of both PHP and eAccelerator. Almost immediately after initiating a stress test on our test servers we experienced the dreaded “PHP Access Violation” error – which brings down the entire IIS Worker Process to its heels.

Continue reading

Redirecting External Links to Old Downloads

We’re trying something new with our rewrite rules, and will be redirecting links from non-NeoSmart sites for older versions of our programs to the download page for the latest program.

For instance, if a Slashdot post is pointing to EasyBCD 1.5 setup file directly, it will be redirected to the EasyBCD download page where the user will have a choice of downloading the very newest version of EasyBCD or an older version if they so choose.

We were a bit hesitant to mess around with incoming links (technically, it isn’t linkjacking since they’re all our links to begin with, but it’s dangerously close!), but the number of direct download links to old versions of EasyBCD from external sites is dangerously high – especially when newer versions contain patches for many serious issues that have arisen over time.

External links to the newest version will never be redirected. We like hotlinking, just so long as proper credit is given; and since there is no danger in a Digg post containing a direct link to EasyBCD 1.6 (which is the newest at the time of this post), it would go ahead and download directly, no intervention whatsoever.

We hope this is a good idea that will protect people from out-of-date articles and links. It’s important to be up to date no matter what software your using, and with system utilities it’s a hundred times more essential that you use the latest version available from the get-go.

Please let us know what you think, our goal is to keep our readers, members, and users alike informed, safe, sound, and happy. So post away!

How To: Open Source + Windows + IIS… with Stability

As we mentioned back in March, we switched NeoSmart Technologies over from PHP‘s ISAPI extension for Windows/IIS to Microsoft’s “FastCGI for IIS” implementation instead in hopes of achieving better reliability and uptime during times of heavy load.

Whether you like Windows or not, at some point or the other, you may find yourself using IIS 6 or even 7, and then you’ll be wondering why the open source technologies you’re using aren’t as stable as ASP or MSSQL on Windows. However, ever since the release of IIS 6, Microsoft has truly remade Internet Information Services as a real contender in the server market, providing a highly secure, stable, fast, and flexible web server for the masses. IIS 7 (due to ship with Longhorn Server sometime in 2007) is currently showing all the signs of being even better, with complete modularization of all components and a highly extensible, XML-based framework.

We’re really happy to be able to finally say with all conviction that it really works! This week, NeoSmart Technologies was featured on the homepages of many link aggregation sites (including Slashdot) for our Desktop vs. Web RIAs article. And we’re glad to say that even with the extreme load, for the entire past week we’ve had 100.00% uptime with respect to network, IIS, MySQL, and everything else!

Continue reading

No More Downtime!

It seems that every time we get on Slashdot (or Digg for that matter), we go down. It doesn’t make a difference just how well prepared we are, what kind of hosting we’re using, what the application being Slashdotted is, etc. It’s the unwritten law at NST. But we hope this’s the last time we ever experience downtime for a while.1

Why? We’ve left PHP. Well, not exactly. It seems that PHP doesn’t give a damn about Windows users. PHP has repeatedly stated that “we’re aware of [….] serious stability issues on Windows…” But they’ve done nothing about it for almost a year now. Their advice is to abandon (their own) PHP ISAPI connector and instead fallback to the ages-old and incredibly slow PHP CGI solution.

Continue reading


  1. Currently, NeoSmart Technologies is running off of a dedicated host (from LunarPages) with eAccelerator, MySQL, WP Cache, and some more optimization goodiness. 

20 Hours of Downtime

PHP really sucks. Unbelievably so. On LAMP, it’s awesome. But if you’re on a new, shiny WIMP server, PHP is the pits. PHP stability on IIS is about 1 over a million that on a LAMP server. So we’re sorry. We’re sorry we had a 20 hour outage and couldn’t do anything about because we had no idea it happened. We’re sorry we ever thought we could trust PHP on Windows/IIS for even a minute under virtually no-load without keeping our eyes on it. We’re especially sorry that NeoSmart Technologies, the blog, the forums, the downloads, the whitepapers, and all the resources were unavailable for that long.

Ever since moving to Windows, we’ve had unbelievably great results on MySQL, JSP, and ASP. But with PHP, it’s been nightmare after nightmare to no end. PHP corporation (or whatever it is) is aware of this, though they’re not confessing to any particular bugs nor are they expressing any interest in solving this. We moved to PHP 5.2 in hopes of addressing the stability – according to PHP, that was fixed. What they neglected to mention was a bunch of other bugs that still haunt PHP’s quest for stability on a Windows Server. IIS auto-restarted per our configuration, but the entire server needed a reset to get PHP working again. Ugh!

Anyway, we’re back up now, and we’re looking at some of the alternate PHP engines out there. Nothing is like PHP of course, because “there isn’t a need” for a PHP-compatible PHP replacement (then again, just by the sound of it..) but several Windows-specific “PHP compilers” exist that would take care of the issue. Then again, we could always jump down to PHP 4 – but that’s just scary. At any rate, rest assured, we’re scouring the web and working nonstop looking for a solution to this nonsense.