Apache2 – Prevent Apache2 from Executing CGI in Static Directory

Apache2cgistatic-content

I am running an Apache 2 web server running on Ubuntu 20.04 LTS. I have a Python CGI handler enabled for the /var/www/html directory, which is the DocumentRoot. I am wondering how to exclude a certain directory from running CGI for Python files.
Here in my CGI config:

<Directory "/var/www/html">
    Options +ExecCGI
    AddHandler cgi-script .py
        <IfModule mod_rewrite.c>
                RewriteEngine On
                RewriteCond %{REQUEST_FILENAME} !-d
                RewriteCond %{REQUEST_FILENAME}\.py -f
                RewriteRule ^(.*)$ $1.py
        </IfModule>
</Directory>

<Directory "/var/www/html/static/cdn">
        DirectoryIndex disabled
        Options +Indexes -ExecCGI
        AllowOverride None
        Require all granted
</Directory>

In the /static/cdn directory, I want .py files to be served just like any other static file, instead of being executed as CGI. Here is a tree of the cdn directory:

.
├── checkForUpdates.exe
├── checkForUpdates.py
└── findLogErrors
    ├── botCriteria.json
    ├── cleanup.json
    ├── findLogErrors.exe
    └── version.json

1 directory, 6 files

I am able to see the indexes of the directory in the web browser, as desired. I am able to view or download any file from this directory except checkForUpdates.py. The server is not trying to execute it as CGI, it's giving a 403. The permissions on checkForUpdates.py are the same as the other files:

nbroyles@webserver:/var/www/html/static/cdn$ ls -altr
total 15548
-rwxrwxr-x 1 www-data web 15901526 Nov 17 11:37 checkForUpdates.exe
drwxrwxr-x 7 www-data web     4096 Nov 19 11:13 ..
drwxrwxr-x 2 www-data web     4096 Dec 23 09:41 findLogErrors
drwxrwxr-x 3 www-data web     4096 Dec 23 09:49 .
-rwxrwxr-x 1 www-data web     2072 Dec 23 09:49 checkForUpdates.py

How can I view the .py file just like any of the .json or .exe files? I'm sure there's something simple I'm missing in my config. Any help is greatly appreciated!

Best Answer

You need to add SetHandler default-handler in <Directory "/var/www/html/static/cdn">

Related Topic