Je veux masquer l’extension .py d’un script Python chargé dans un navigateur Web et continuer à exécuter le script. Par exemple: taper url.dev/basics/pythonscript
dans la barre d’adresse déclenche pythonscript.py et affiche les résultats dans la fenêtre du navigateur.
Taper url.dev/basics/pythonscript.py
fonctionne et les résultats du script Python sont affichés. Je peux aussi obtenir que mod_rewrite réécrit url.dev/basics/phpscript
en url.dev/basics/phpscript.php
et lance le code PHP avec succès en arrière-plan.
Mais url.dev/basics/pythonscript
ne redirige PAS vers url.dev/basics/pythonscript.py
(j’obtiens un 404 non trouvé) .
Informations de fond
A) La réécriture de PHP fonctionne: les éléments suivants dans un fichier .htaccess situé dans url.dev/basics/ WORKS pour les scripts PHP:
RewriteEngine On RewriteBase /basics/ RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME}\.php -f RewriteRule ^(.*)$ $1.php
B) La réécriture de Python ne fonctionne PAS: ce qui suit dans un fichier .htaccess situé dans url.dev/basics/ ne fonctionne PAS pour les scripts Python (j’ai un 404 introuvable) :
RewriteEngine On RewriteBase /basics/ RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME}\.py -f RewriteRule ^(.*)$ $1.py
C) Je suis un programmeur débutant au cours de l’ exercice 2: Votre premier programme dans la section Bases du génie logiciel pour applications Internet . J’essaie de suivre la recommandation d’utiliser un environnement d’exécution où «One URL = one file», mais que vous souhaitez utiliser Python plutôt que PHP. Je me rends compte que ce n’est pas la meilleure façon de créer une application Web. Ce n’est qu’une convention à utiliser pendant la première partie du cours ci-dessus.
D) J’ai configuré l’environnement de développement des hôtes virtuels dans OS 10.6 Snow Leopard afin de pouvoir accéder à mon développement sur url.dev selon Hacky Holidays sur adactio.com. Ma version Python est Python 2.6.1.
E) Je prévois d’utiliser Django à terme, mais je veux d’abord travailler sur un code plus simple si possible pour mieux comprendre ce qui se passe.
F) J’ai ce qui suit dans mon httpd.conf:
TypesConfig /private/etc/apache2/mime.types AddType application/x-compress .Z AddType application/x-gzip .gz .tgz AddHandler cgi-script .py
et:
LoadModule php5_module libexec/apache2/libphp5.so LoadModule fastcgi_module libexec/apache2/mod_fastcgi.so
G) Ma version d’Apache (vue dans le journal du serveur après le redémarrage du serveur): Apache / 2.2.14 (Unix) mod_ssl / 2.2.14 OpenSSL / 0.9.8l DAV / 2 PHP / 5.3.1 mod_fastcgi / 2.4.2 configuré – reprendre les opérations normales
Dans l’attente de toute aide!
Si vous utilisez une boîte Linux, n’utilisez pas mod-rewrite – renommez le script.
vous pouvez appeler le script – pythonscript pas pythonscript.py
vous ajoutez à la première ligne du script pointant vers votre interpréteur python
et définissez le fichier pour qu’il soit exécutable
avec
chmod +x pythonscript
quand le fichier est exécuté – il lira la première ligne du fichier et exécutera l’interpète sur la première ligne
#!/usr/bin/python
puis définissez le répertoire pour exécuter le script
pour que cela fonctionne, vous modifiez les fichiers dans le répertoire exécutable dans votre fichier .htaccess
basics/.htaccess ----------- Options +ExecCGI SetHandler cgi-script -----------
Votre script python ressemblera à ceci
basics/pythonscript ------- #!/usr/bin/python print "STATUS: 200 OK\n\n" print "hello world" ------
Attention … Vous pouvez obtenir une erreur dans votre fichier error_log qui ressemble à ceci.
[Thu Aug 05 19:26:34 2010] [alert] [client 127.0.0.1] /home/websites/testing/htdocs/basics/.htaccess: Option ExecCGI not allowed here
Si cela se produit, votre serveur Web ne permet pas les modifications depuis votre fichier .htaccess
Votre serveur Web devra pouvoir autoriser les modifications dans votre fichier htaccess. Vous devrez donc activer Allowoverride All dans votre fichier httpd.conf.
.... Allowoverride All
J’ai trouvé la solution: je devais append le type MIME de l’application pour que le serveur Web Apache comprenne qu’il doit exécuter le code.
Dans url.dev/basics/.htaccess, ajoutez:
AddType application/x-httpd-py .py
N’oubliez pas de redémarrer Apache: sudo apachectl graceful
Et il fonctionne! http://url.dev/basics/pythonscript exécute le code dans pythonscript.py! Notez que je ne suis pas sûr que ce soit la meilleure façon de le faire, mais cela fonctionne.
Voici mon fichier complet .htaccess:
# Options +ExecCGI # SetHandler cgi-script AddType application/x-httpd-py .py RewriteEngine On RewriteBase /basics/ RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME}\.py -f RewriteRule ^(.*)$ $1.py