Estoy usando Apache 2 en Linux 18.04 con Python 3.6. Tengo el siguiente host virtual configurado...
<VirtualHost *:80> # The ServerName directive sets the request scheme, hostname and port that # the server uses to identify itself. This is used when creating # redirection URLs. In the context of virtual hosts, the ServerName # specifies what hostname must appear in the request's Host: header to # match this virtual host. For the default virtual host (this file) this # value is not decisive as it is used as a last resort host regardless. # However, you must set it for any further virtual host explicitly. ServerName lab.chicommons.coop ServerAdmin webmaster@localhost DocumentRoot /var/www/html # Available loglevels: trace8, ..., trace1, debug, info, notice, warn, # error, crit, alert, emerg. # It is also possible to configure the loglevel for particular # modules, eg LogLevel info ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined Alias / /var/www/html/client/build/ #<Directory /srv/rdmo/rdmo-app/static_root/> # Require all granted #</Directory> # For most configuration files from conf-available/, which are # enabled or disabled at a global level, it is possible to # include a line for only one particular virtual host. For example the # following line enables the CGI configuration for this host only # after it has been globally disabled with "a2disconf". #Include conf-available/serve-cgi-bin.conf WSGIDaemonProcess maps \ home=/var/www/html/web python-home=/var/www/html/web/venv WSGIProcessGroup maps WSGIScriptAlias /coops /var/www/html/web/maps/wsgi.py/coops process-group=maps WSGIScriptAlias /data /var/www/html/web/maps/wsgi.py/data process-group=maps WSGIPassAuthorization On <Directory /var/www/html/web/maps> <Files wsgi.py> Require all granted </Files> </Directory> </VirtualHost>Como puede ver, esta directiva
Alias / /var/www/html/client/build/captura todos los caminos. Sin embargo, me gustaría configurarlo de manera que capture todas las rutas excepto "/coops*" y "/data*". ¿Cómo configuraría mi Alias para que esto sea posible?
Es mejor usar las direcciones URL de Django con expresiones regulares para "atrapar" las direcciones URL. Defina una URL para "/coops*", una URL para "/data*" y luego una URL predeterminada para cualquier otra cosa. Si desea que el servidor web sirva archivos directamente desde direcciones URL específicas y no desde Django, defínalos en <Directory...> .
Configure Apache de acuerdo con esta documentación . Por ejemplo:
Alias /robots.txt /path/to/mysite.com/static/robots.txt Alias /favicon.ico /path/to/mysite.com/static/favicon.ico Alias /media/ /path/to/mysite.com/media/ Alias /static/ /path/to/mysite.com/static/ <Directory /path/to/mysite.com/static> Require all granted </Directory> <Directory /path/to/mysite.com/media> Require all granted </Directory> WSGIScriptAlias / /path/to/mysite.com/mysite/wsgi.py <Directory /path/to/mysite.com/mysite> <Files wsgi.py> Require all granted </Files> </Directory> Si tiene URL en las que desea ejecutar vistas específicas, defínalas como urlpatterns ( documentación ). Y luego, defina una vista predeterminada que defina como el último patrón de URL para "atrapar" cualquier URL que no haya sido capturada por una vista específica, y asígnela a una vista predeterminada. También puede redirigirlo a una vista específica, por ejemplo, la página principal. O bien, puede mantener su sitio web sin una vista predeterminada, y luego cualquier URL que no coincida con ninguna vista devolverá 404, que también puede personalizar si lo desea.
Se volvería ingobernable con muchas más excepciones, pero puede usar las búsquedas anticipadas negativas de PCRE fácilmente aquí dentro de AliasMatch:
AliasMatch ^/(?!coops/)(?!data/).* /var/www/html/client/build/$0