Utiliser mod_rewrite pour masquer l’extension .py d’un script Python accessible sur un navigateur Web

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.

  1. L’URL url.dev/basics/pythonscript récupère le fichier statique /pythonscript.py
  2. Le navigateur affiche toujours l’url url.dev/basics//pythonscript

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