If you're stuck with a situation that requires running Drupal on Windows/IIS/MySQL/PHP (WIMP - an appropriate acronym, huh?), these tips might help.
We had already purchased a product that provides mod_rewrite like functionality for using clean urls on IIS for our main site. Here is the config that we're using to enable it. I also had to go directly into the database to change to clean_url value to s:1:"1"; as I couldn't change it in the default admin section (and didn't take time to investigate what the code was doing), but it seems to work pretty well. If you get a chance, please let me know if there are any gaps and/or the potential for unintended consequences.
[ISAPI_Rewrite] # http://www.isapirewrite.com/ RepeatLimit 32 # Block external access to the httpd.ini and httpd.parse.errors files RewriteRule /httpd(?:\.ini|\.parse\.errors).* / [F,I,O] # Block external access to the Helper ISAPI Extension RewriteRule .*\.isrwhlp / [F,I,O] # Rewrite protolive to fully qualified url RewriteCond Host: connect RewriteRule (.*) http\://connect.educause.edu$1 [I,R] # Accept a url with a period and pass it through unchanged. #RewriteRule (.*\..*) $1 [I,L] # Accept a url with .css and pass it through unchanged. RewriteRule (.*.css) $1 [I,L] # Accept a url with .js and pass it through unchanged. RewriteRule (.*.js) $1 [I,L] RewriteRule /index.php.* $0 [I,L] RewriteRule /(.*)\?(.*) /index.php\?q=$1&$2 [I,L] RewriteRule /(.*) /index.php\?q=$1 [I,L]
Here is some preliminary code that I'm using to execute the cron script. I just sheduled it to run on a periodic basis. As with the info above, please let me know if there are key gaps that my catch me.
dim ret_value ret_value = checkpage("http://connect.educause.edu/cron.php") Dim objFSO Dim objStream Set objFSO = createobject("scripting.filesystemobject") Set objStream = objFSO.CreateTextFile("c:\inetpub\wwwroot\custom\hit_cron.log", True) objStream.Writeline ret_value set objFSO = nothing set objStream = nothing Wscript.Quit function checkPage(url) Dim xmlhttp Set xmlhttp = CreateObject("Msxml2.SERVERXMLHTTP") xmlhttp.Open "GET", url, false xmlhttp.setRequestHeader "Pragma", "no-cache" xmlhttp.setRequestHeader "Cache-Control", "no-cache" on error resume next xmlhttp.Send 'Wait for up to 30 seconds if we've not gotten the data yet If xmlhttp.readyState <> 4 then xmlhttp.waitForResponse 30 End If on error resume next If (xmlhttp.readyState <> 4) Then xmlhttp.Abort checkPage = "TIMEOUT" else checkPage = xmlhttp.status end if checkPage = checkPage & " - " & xmlhttp.statusText & " - " & now() set xmlhttp = Nothing End Function