Skip to content

How to Configure Apache CGI Scripts

DodaTech Updated 2026-06-24 1 min read

CGI scripts allow dynamic content generation through external programs. Proper ScriptAlias and ExecCGI configuration enables script execution. This guide walks through the specific troubleshooting steps to diagnose and resolve CGI issues.

Before You Begin

Before you begin, be sure to have the following in place:

  • A Linux server with the relevant software installed
  • Access to the command line interface
  • Appropriate permissions (root or sudo)

Quick Fix

Wrong

ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/\n<Directory /usr/lib/cgi-bin>\n    Options None\n</Directory>

Wrong: CGI directory without ExecCGI option

ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/\n<Directory /usr/lib/cgi-bin>\n    Options +ExecCGI\n    AddHandler cgi-script .cgi .pl .py\n    Require all granted\n</Directory>

Right: CGI directory with ExecCGI and handler

Output

CGI configured in /usr/lib/cgi-bin/\nExtensions: .cgi, .pl, .py\nExecCGI: enabled

Prevention

To avoid future issues, follow these best practices:

  • Enable mod_cgi or mod_cgid with a2enmod
  • Use ScriptAlias to map a URL path to the CGI directory
  • Set Options +ExecCGI to allow script execution
  • Use AddHandler cgi-script to define CGI file extensions
  • Always set proper file permissions and ownership

DodaTech Tools

For further assistance with any of the above issues, consider using DodaTech consulting services or DodaTech tutorials for more in-depth guidance.

Common Mistakes with cgi config

  1. Forgetting deriving (Show, Eq) on custom data types needed for debugging
  2. Placing the wildcard pattern first in case expressions, making all subsequent patterns unreachable
  3. Using head and tail instead of pattern matching, causing runtime errors on empty lists

These mistakes appear frequently in real-world APACHE code. DodaTech's contributors have identified these patterns through analysis of open-source projects and production systems.

Practice Exercise

Write a pure function that safely divides two integers using Maybe, then test it with edge cases like division by zero and negative numbers.

This exercise reinforces the concepts covered in this guide. Try implementing it before checking online solutions.

FAQ

Why is my CGI script downloading instead of executing?|||AddHandler cgi-script .cgi is missing, or Options +ExecCGI is not set. Apache serves the file as static content.
What is the difference between mod_cgi and mod_cgid? mod_cgid is a variant that uses a daemon for CGI processing, recommended for MPM worker or event. mod_cgi works with MPM prefork.

Built by the developers of DodaTech

Doda Browser, DodaZIP & Durga Antivirus Pro