Map CGI Extension in IIS


How do I get IIS to use ActivePerl for my CGI scripts?


During installation, ActivePerl creates script mappings in IIS for the .pl and .plx extensions but not the .cgi extension. To support the .cgi file extension, you will need to replicate the .pl extension settings.

  1. Go to Control Panel | Administrative Tools
  2. Open Internet Information Services
  3. Right-click the Default web site and select Properties.
  4. In the Properties dialog-box select the 'home Directory' tab.
  5. Click on the configuration button in the Application Configuration dialog.
  6. Click on the 'Add' button.

In the Add/Edit dialog-box, ensure the following settings are correct:

  • for executable, put in C:\Perl\bin\perl.exe "%s" %s ( adjust this if you have installed Perl elsewere)
  • for the extension, enter 'cgi'
  • for Verbs, select 'Limit to:' and put in 'GET,HEAD,POST'
  • select 'Script Engine' and 'Check that file exists'

Click OK to close all of the open dialog-boxes. You should now be able to place the cgi files you want to run into the wwwroot folder (usually c:\inetpub\wwwroot\), or create a virtual web directory in IIS to the location of your cgi files.

ActivePerl and Apache CGI config


How do I configure Apache to use ActivePerl for CGI?


To configure appache to use ActivePerl for CGI:

  1. Edit your httpd.conf file. You can open this file by selecting
    Start | Programs | Apache HTTP Server | Configure Apache Server
    | Edit the Apache httpd.conf Configuration File
    which will open
    httpd.conf file in the notepad editor.
  2. Search for "DocumentRoot". You should see a section that looks like this:

    # DocumentRoot: The directory out of which you will serve your
    # documents. By default, all requests are taken from this directory, but
    # symbolic links and aliases may be used to point to other locations.
    DocumentRoot "C:/apacheroot"

  3. Change the value of DocumentRoot to the actual local path to your web site.
    Make sure you use '/' forward slashes in the path. Apache doesn't understand
    '\' backward slashes in paths.
  4. Just below the DocumentRoot section you will see the main directory section:
    Options FollowSymLinks
    AllowOverride None

    on the Option line, add "ExecCGI":

    Options FollowSymLinks ExecCGI
  5. Search for the line:
    #AddHandler cgi-script .cgi

    Remove the '#' at the beginning to uncomment this line.

    AddHandler cgi-script .cgi

    If you want to use the .pl extension for your CGI scripts, change the extension
    so that the line looks like this:

    AddHandler cgi-script .pl
  6. Save and close httpd.conf.

  7. Restart the Apache service using the Apache Service
  8. Test your configuration by placing the following test script in your
    DocumentRoot directory as '' (or test.cgi). Open the
    local URL http://localhost/ in your browser.

    The test script:

    # ^^^ this must be the first line of the script! ^^^
    # start code

    use strict;
    use CGI;
    my $q = new CGI;

    # print header and start the markup output

    print $q->header( "text/html" ),$q->start_html( "hello from perl cgi!" );
    print $q->h2("Hello World!");
    print $q->end_html;
    # end code