![CGI CGI](media/images/admin_handler_cgi.png)
Index → Modules → Handlers
Handler: CGI
The cgi handler executes CGI programs.
Parameters
This module accepts three parameters:
Parameters | Type | Description |
---|---|---|
Script Alias | String | It defines a kind of execution interpreter. The CGI will be run as a parameter of this script. |
Change to UID | String | Executes each CGI under its owner's user ID. |
Error handler | Boolean | Use CGI output as error message. |
Check file | Boolean | Check file existence to build PATH_INFO. |
Pass request | Boolean | Pass request headers. |
Allow X-Sendfile | Boolean | Use the non-standard X-Sendfile header. |
Pass Request Headers | Boolean | Forward all the headers to the CGI as HTTP_* |
Note that the X-Sendfile feature also supports X-Accel-Redirect headers transparently. This is to allow the migration of applications supporting it whithout having to make major code rewrites.
Warning:
The Check file flag affects how PATH_INFO is generated. You should disable this when you have an application that is running the whole virtual server tree, as it is a common source of problems. You can look at a practical example about PATH_INFO in the File & Send handler documentation.
Examples
This is a pretty common example. It defines a directory called cgi that points to a path out of the Sever root directory where the CGI programs are located.
![CGI CGI](media/images/admin_handler_cgi.png)
Another example could be the case where you wanted your default requests to be managed by a specific script.
A real life example could be running Trac as a CGI script. In that case you would want to map a URL to the trac.cgi script.
For this you only need to set up the Script Alias option. Assuming you are using a Directory-type rule for the path /trac managed by the CGI handler, you could set /usr/share/trac/cgi-bin/trac.cgi as Script Alias.
After this, every request that matched the /trac path would be managed by the trac.cgi script.