2009-05-19 5 views
3

En utilisant Apache 2, je veux configurer mon site Web afin que toutes les demandes au domaine sont transmises à un script CGI Python. Fondamentalement, si l'utilisateur va à http://www.example.com, je veux que le cgi /cgi-bin/cgi.py soit exécuté. Si l'utilisateur passe à http://www.example.com/index.rss, je veux que /cgi-bin/cgi.py soit exécuté avec /index.rss comme argument. J'ai essayé différentes combinaisons de ScriptAlias ​​et de Rewrite et je n'arrive pas à les trouver dans la bonne relation.Avoir un script CGI attraper toutes les demandes à un domaine avec Apache

Répondre

1

(pas sûr de la procédure correcte avec répondeur ceux propre question - mais ...)

On dirait que j'avais conflit avec ScriptAlias ​​et RewriteRule. À la fin, la solution consistait à utiliser AddHandler pour créer une relation, puis utiliser mod_rewrite pour tout extraire dans le CGI. Et RewriteCond pour éviter d'attraper/resources/et/media /. Mon VirtualHost ressemble maintenant à ceci:

AddHandler cgi-script .cgi 
RewriteEngine on 
RewriteCond %{REQUEST_URI} !^/resources/.*$ 
RewriteCond %{REQUEST_URI} !^/media/.*$ 
RewriteRule ^(.*)$ /cgi-bin/pyblosxom.cgi$1 [L] 

Merci pour votre aide les gars.

0

Bien que ce ne soit pas 100% ce que vous cherchez, voici le .htaccess que j'utilise pour un vieux domaine abandonné à moi pour rediriger les gens correctement. Il redirige essentiellement pour tout fichier ou répertoire non trouvé dans la structure du répertoire local. Il est au script lui-même pour savoir ce que l'url, il a été appelé à:

RewriteEngine On 

#if the request isn't for a file or a directory... 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule . index.php 
2

Ceci permet de rediriger toutes les requêtes vers votre fichier python. Si vous rencontrez des problèmes avec l'alias de script encore, essayez d'ajouter le drapeau passthrough [PT] à la fin de la ligne RewriteRule Si vous voulez toujours être en mesure d'accéder aux images etc puis ajoutez ceci avant le RewriteRule:

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
0

J'ai utilisé la règle de réécriture de capture et cela a fonctionné dans une certaine mesure. Le problème était que la chaîne de requête d'origine de l'URI de la requête n'était pas transmise au cgi lors de l'utilisation de $ 1. J'ai fini par enlever la capture et juste référencer ENV ['REQUEST_URI'] dans mon script cgi pour avoir accès.