Sometimes you may need to run non-php script such as perl or python scripts in Apache server. In such cases, you need to run them as CGI script in Apache. In this article, we will look at how to run CGI script in Apache web server.
How to Run CGI Script in Apache
There are different ways to run CGI Script in Apache – using server configuration, virtual host, or .htaccess (mod_rewrite). The key is to place the following two lines in either of these locations.
AddHandler cgi-script .cgi .pl
.pyOptions +ExecCGI
In the above code, the first line specifies the file extensions who need to be treated as CGI script. The second line tells Apache to execute them as CGI script. In our case, we have specified 3 file extensions to be run as CGI script.
1. Using Apache Server Configuration
If you have access to Apache server configuration file, open it in a text editor.
$ sudo vi /etc/httpd/conf/httpd.conf
Your configuration file may be in any of the following locations, depending on your Linux distribution and type of installation.
/etc/apache2/httpd.conf
/etc/apache2/apache2.conf
/etc/httpd/httpd.conf
/etc/httpd/conf/httpd.conf
Add the following line to your configuration file, or uncomment them by removing # at their beginning.
AddHandler cgi-script .cgi .pl
.pyOptions +ExecCGI
If you want to enable CGI execution for specific directory (e.g /var/www/html/cgi-files), add the above lines within Directory tag for that folder.
<Directory /var/www/html/cgi-files> Options +ExecCGI SetHandler cgi-script </Directory>
In this case, you need to use SetHandler directive instead of AddHandler.
Restart Apache Server to apply changes
$ sudo service apache2 restart
Please note, this will enable server-wide CGI script execution, for all website/domains/virtual hosts.
2. Using virtual host
If you don’t have access to Apache server configuration or if you want to enable CGI execution for only specific domain, then open that domain’s virtual host configuration file. Replace the following file path with that of your virtual host configuration file.
$ sudo vi /etc/apache2/sites-available/example.com.conf
Add the following lines to it to enable cgi execution for all files in /var/www/html/cg-files
<Directory /var/www/html/cgi-files> <Files ~ (.cgi$)> SetHandler cgi-script Options ExecCGI allow from all </Files> </Directory>
Save and close the file.
Restart Apache Server to apply changes
$ sudo service apache2 restart
3. Using .htaccess file
If you have enabled mod_rewrite (.htaccess) for your website, open it in a text editor.
$ sudo vi /var/www/html/.htaccess
Add the following lines to it to enable CGI execution for specific file extensions.
AddHandler cgi-script .cgi .pl
.pyOptions +ExecCGI
Instead, if you want to enable CGI execution for all files in a particular directory /var/www/html/cg-files then add the following lines to your .htaccess file.
<Directory /var/www/html/cgi-files> <Files ~ (.cgi$)> SetHandler cgi-script Options ExecCGI allow from all </Files> </Directory>
Now, when you open browser and request any of the .pl or .py files for which CGI execution is enabled, Apache will automatically execute it as a CGI script.
That’s it. In this article, we have learnt 3 different ways to run CGI script in Apache.
Also read:
How to Create Permanent Alias in Linux
How to Give User Folder Access in Linux
How to Install Swift in Ubuntu
How to Install Monit in CentOS
How to Install mod_wsgi in Apache
Related posts:
Sreeram has more than 10 years of experience in web development, Python, Linux, SQL and database programming.