Puncte:1

De ce Apache cu mod_wsgi forțează descărcarea fișierelor .py în loc să le execute?

drapel gb

De ce Apache cu mod_wsgi forțează descărcarea fișierelor .py în loc să le execute?

Încerc să rulez Django, dar prima problemă pe care o am este că fișierele .py nu se execută.

Urmăresc documentele de aici https://docs.djangoproject.com/en/4.0/howto/deployment/wsgi/modwsgi/

  • Rulez Ubuntu 20.04.3 LTS
  • libapache2-mod-wsgi-py3 instalat și activat
  • apachectl configtest Sintaxa OK
  • Toate fișierele dorite www-data:www-data
  • Fișierele .py sunt chmod +x
  • /var/log/apache2/access.log este gol

/var/log/apache2/error.log contine:

Apache/2.4.41 (Ubuntu) mod_fcgid/2.3.9 OpenSSL/1.1.1k mod_wsgi/4.6.8 Python/3.8 configurat -- reluarea operațiunilor normale

Fișierul .htaccess de la rădăcină are

RewriteEngine activat
ServerSignature Off

Directorul /var/www/html/example.com/public_html este acesta:

introduceți descrierea imaginii aici

Aceasta este ceea ce văd; făcând clic pe un fișier .py forțează descărcarea acestuia.

introduceți descrierea imaginii aici

/etc/apache2/sites-available/default-ssl.conf:

<IfModule mod_ssl.c>
    <VirtualHost _default_:443>
        ServerAdmin webmaster@localhost

        DocumentRoot /var/www/html

        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combinat

        SSLEngine activat

        SSLCertificateFile /etc/ssl/certs/ssl-cert-snakeoil.pem
        SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key

        <FilesMatch "\.(cgi|shtml|phtml|php)$">
                SSLOptions +StdEnvVars
        </FilesMatch>
        <Director /usr/lib/cgi-bin>
                SSLOptions +StdEnvVars
        </Director>


Alias ​​/static /var/www/html/example.com/public_html/contact/static
Alias ​​/media /var/www/html/example.com/public_html/contact/media

<Director /var/www/html/example.com/public_html/contact/static>
    Solicitați toate acordate
</Director>

<Director /var/www/html/example.com/public_html/contact/media>
    Solicitați toate acordate
</Director>

WSGIScriptAlias ​​/ /var/www/html/example.com/public_html/contact/contact/wsgi.py

WSGIDaemonProcess example.com python-home=/var/www/html/example.com/public_html/contact

WSGIProcessGroup example.com

WSGISocketPrefix run/wsgi

 <Director /var/www/html/example.com/public_html/contact/contact>
    <Fișiere wsgi.py>
        Solicită toate grantd
    </Fișiere>
</Director>

<Director /var/www/html/example.com/public_html>
AllowOverride Nici unul
    Comanda permite, refuza
    Permite de la toți
    Opțiuni +ExecCGI
    AddHandler cgi-script .py
</Director>

    </VirtualHost>
</IfModule>

# vim: syntax=apache ts=4 sw=4 sts=4 sr noet

/etc/apache2/sites-available/000-default.conf

<VirtualHost *:80>

    ServerAdmin webmaster@localhost
    DocumentRoot /var/www/html

    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combinat

   # Permite fișiere .htaccess
    <Director /var/www/html>
        Opțiuni Indexuri FollowSymLinks MultiViews
        AllowOverride All
        Solicitați toate acordate
    </Director>


Alias ​​/static /var/www/html/example.com/public_html/contact/static
Alias ​​/media /var/www/html/example.com/public_html/contact/media

<Director /var/www/html/example.com/public_html/contact/static>
    Solicitați toate acordate
</Director>

<Director /var/www/html/example.com/public_html/contact/media>
    Solicitați toate acordate
</Director>

WSGIScriptAlias ​​/ /var/www/html/example.com/public_html/contact/contact/wsgi.py

WSGIDaemonProcess example.com python-home=/var/www/html/example.com/public_html/contact

WSGIProcessGroup example.com

WSGISocketPrefix run/wsgi

 <Director /var/www/html/example.com/public_html/contact/contact>
    <Fișiere wsgi.py>
        Solicitați toate acordate
    </Fișiere>
</Director>


<Director /var/www/html/example.com/public_html>
AllowOverride Nici unul
    Comanda permite, refuza
    Permite de la toți
    Opțiuni +ExecCGI
    AddHandler cgi-script .py
</Director>

</VirtualHost>

# vim: syntax=apache ts=4 sw=4 sts=4 sr noet
asktyagi avatar
drapel in
Aveți vreo intrare cu RemoveHandler?
Puncte:-1
drapel vn

WSGIScriptAlias nu oferă o modalitate de a face clic și de a vizualiza serviciul pentru python, ar trebui să utilizați ruta (calea) definită de python pentru a vă accesa aplicația. Deschideți linkuri către .py fișierele pot trece prin servirea fișierelor statice în loc de WSGI.

pentru că montezi aplicația WSGI la rădăcină, incearca sa deschizi / în loc de /a lua legatura sa vad daca functioneaza.

BlueDogRanch avatar
drapel gb
Folosesc deja `WSGIScriptAlias ​​/` în loc de `WSGIScriptAlias ​​/contact`
Chino Chang avatar
drapel vn
@BlueDogRanch, așa că încercați să deschideți `/` în browser în loc să deschideți `/contact`

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.