The relatively new document types Office 2007 has given some web hosts problems when their clients want to offer documents for download. Most often, the documents are being offered by the web server as “text/html” which is then rendered as a ton of garbage on the web user’s screen.
The best way to resolve this is to add all the MIME types to the server’s main configuration. IIS7 for Windows already has these MIME types set up correctly by default. IIS6 and IIS5 require the MIME types to be added, as might Apache on older installations. For Apache, there is also a workaround for the individual domain owner to add the mime types via Apache’s .htaccess file.
IIS 6 MIME type addition (for the Server Administrator)
Before this can be done, ensure that your server is also set to allow direct metabase editing:
- Load IIS Manager: Start -> Run, “inetmgr” -> [OK]
- Right click the “server” and click “Properties”
- Within the “Internet Information Services” tab (usually the only tab), ensure that the “Enable Direct Metabase Edit” checkbox is checked.
- Click [OK]
Be sure to back up IIS’s configuration (here for IIS5) beforehand. I won’t take any responsibility for an admin breaking his server. I have reason to believe this may also work on IIS5 however I have just as much reason to believe that it might just give lots of errors. If an IIS5 / Windows 2000 admin is willing to test this for me after backing up your configuration please let me know of the results.
Copy the following text into a file named msoff07-addmime.vbs and execute it once from the commandline by typing cscript msoff07-addmime.vbs and pressing Enter. If you run it more than once, the MIME types will be added each time and you will have multiple identical entries:
' This script adds the necessary Office 2007 MIME types to an IIS 6 Server. ' To use this script, just double-click or execute it from a command line. ' Running this script multiple times results in multiple entries in the ' IIS MimeMap so you should not run it more than once. ' Modified from http://msdn.microsoft.com/en-us/library/ms752346.aspx Dim MimeMapObj, MimeMapArray, MimeTypesToAddArray, WshShell, oExec Const ADS_PROPERTY_UPDATE = 2 ' Set the MIME types to be added MimeTypesToAddArray = Array(".docm", "application/vnd.ms-word.document.macroEnabled.12", _ ".docx", "application/vnd.openxmlformats-officedocument.wordprocessingml.document", _ ".dotm", "application/vnd.ms-word.template.macroEnabled.12", _ ".dotx", "application/vnd.openxmlformats-officedocument.wordprocessingml.template", _ ".potm", "application/vnd.ms-powerpoint.template.macroEnabled.12", _ ".potx", "application/vnd.openxmlformats-officedocument.presentationml.template", _ ".ppam", "application/vnd.ms-powerpoint.addin.macroEnabled.12", _ ".ppsm", "application/vnd.ms-powerpoint.slideshow.macroEnabled.12", _ ".ppsx", "application/vnd.openxmlformats-officedocument.presentationml.slideshow", _ ".pptm", "application/vnd.ms-powerpoint.presentation.macroEnabled.12", _ ".pptx", "application/vnd.openxmlformats-officedocument.presentationml.presentation", _ ".sldm", "application/vnd.ms-powerpoint.slide.macroEnabled.12", _ ".sldx", "application/vnd.openxmlformats-officedocument.presentationml.slide", _ ".xlam", "application/vnd.ms-excel.addin.macroEnabled.12", _ ".xlsb", "application/vnd.ms-excel.sheet.binary.macroEnabled.12", _ ".xlsm", "application/vnd.ms-excel.sheet.macroEnabled.12", _ ".xlsx", "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", _ ".xltm", "application/vnd.ms-excel.template.macroEnabled.12", _ ".xltx", "application/vnd.openxmlformats-officedocument.spreadsheetml.template") ' Get the mimemap object Set MimeMapObj = GetObject("IIS://LocalHost/MimeMap") ' Call AddMimeType for every pair of extension/MIME type For counter = 0 to UBound(MimeTypesToAddArray) Step 2 AddMimeType MimeTypesToAddArray(counter), MimeTypesToAddArray(counter+1) Next ' Create a Shell object Set WshShell = CreateObject("WScript.Shell") ' Stop and Start the IIS Service Set oExec = WshShell.Exec("net stop w3svc") Do While oExec.Status = 0 WScript.Sleep 100 Loop Set oExec = WshShell.Exec("net start w3svc") Do While oExec.Status = 0 WScript.Sleep 100 Loop Set oExec = Nothing ' Report status to user WScript.Echo "Microsoft Office 2007 Document MIME types have been registered." ' AddMimeType Sub Sub AddMimeType (Ext, MType) ' Get the mappings from the MimeMap property. MimeMapArray = MimeMapObj.GetEx("MimeMap") ' Add a new mapping. i = UBound(MimeMapArray) + 1 Redim Preserve MimeMapArray(i) Set MimeMapArray(i) = CreateObject("MimeMap") MimeMapArray(i).Extension = Ext MimeMapArray(i).MimeType = MType MimeMapObj.PutEx ADS_PROPERTY_UPDATE, "MimeMap", MimeMapArray MimeMapObj.SetInfo End Sub |
Apache MIME type addition (for the Server Administrator)
Apache stores its MIME types in a file normally located at $installpath/conf/mime.types. See the mod_mime documentation for more on how it works. Arch Linux installs its MIME types at /etc/httpd/conf/mime.types and Parallels Plesk installs it in /usr/local/psa/admin/conf/mime.types. Your distribution might have it in another place, so find your mime.types file by running locate mime.types.
Add the following lines to your mime.types file:
application/vnd.ms-word.document.macroEnabled.12 docm application/vnd.openxmlformats-officedocument.wordprocessingml.document docx application/vnd.ms-word.template.macroEnabled.12 dotm application/vnd.openxmlformats-officedocument.wordprocessingml.template dotx application/vnd.ms-powerpoint.template.macroEnabled.12 potm application/vnd.openxmlformats-officedocument.presentationml.template potx application/vnd.ms-powerpoint.addin.macroEnabled.12 ppam application/vnd.ms-powerpoint.slideshow.macroEnabled.12 ppsm application/vnd.openxmlformats-officedocument.presentationml.slideshow ppsx application/vnd.ms-powerpoint.presentation.macroEnabled.12 pptm application/vnd.openxmlformats-officedocument.presentationml.presentation pptx application/vnd.ms-powerpoint.slide.macroEnabled.12 sldm application/vnd.openxmlformats-officedocument.presentationml.slide sldx application/vnd.ms-excel.addin.macroEnabled.12 xlam application/vnd.ms-excel.sheet.binary.macroEnabled.12 xlsb application/vnd.ms-excel.sheet.macroEnabled.12 xlsm application/vnd.openxmlformats-officedocument.spreadsheetml.sheet xlsx application/vnd.ms-excel.template.macroEnabled.12 xltm application/vnd.openxmlformats-officedocument.spreadsheetml.template xltx
Apache MIME type addition (For the domain owner with at least FTP access – using .htaccess file)
Add the following text to your domain’s .htaccess file, most commonly in an httpdocs/ directory
AddType application/vnd.ms-word.document.macroEnabled.12 docm AddType application/vnd.openxmlformats-officedocument.wordprocessingml.document docx AddType application/vnd.ms-word.template.macroEnabled.12 dotm AddType application/vnd.openxmlformats-officedocument.wordprocessingml.template dotx AddType application/vnd.ms-powerpoint.template.macroEnabled.12 potm AddType application/vnd.openxmlformats-officedocument.presentationml.template potx AddType application/vnd.ms-powerpoint.addin.macroEnabled.12 ppam AddType application/vnd.ms-powerpoint.slideshow.macroEnabled.12 ppsm AddType application/vnd.openxmlformats-officedocument.presentationml.slideshow ppsx AddType application/vnd.ms-powerpoint.presentation.macroEnabled.12 pptm AddType application/vnd.openxmlformats-officedocument.presentationml.presentation pptx AddType application/vnd.ms-powerpoint.slide.macroEnabled.12 sldm AddType application/vnd.openxmlformats-officedocument.presentationml.slide sldx AddType application/vnd.ms-excel.addin.macroEnabled.12 xlam AddType application/vnd.ms-excel.sheet.binary.macroEnabled.12 xlsb AddType application/vnd.ms-excel.sheet.macroEnabled.12 xlsm AddType application/vnd.openxmlformats-officedocument.spreadsheetml.sheet xlsx AddType application/vnd.ms-excel.template.macroEnabled.12 xltm AddType application/vnd.openxmlformats-officedocument.spreadsheetml.template xltx |