2010-09-14 10 views
1

Mon application Perl indique le nom de fichier 'processing.cgi' dans la barre d'adresse lors de l'exécution sur mon compte d'hébergement, mais sur localhost cela semble fonctionner, c'est-à-dire qu'elle ne révèle pas le nom du fichier .cgi '.Masquage du nom de fichier avec htaccess

est ici .htaccess c'est exactement le même sur les deux sites:

AddHandler cgi-script .cgi 
Options +ExecCGI 

IndexIgnore * 
DirectoryIndex processing.cgi 

RewriteEngine on 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)$ processing.cgi/$1 

RewriteRule ^$ processing.cgi [L] 
RewriteRule ^/$ processing.cgi [L] 

C'est le .htaccess dans/public_html:

Options -Indexes 

RewriteEngine On 
RewriteBase/
RewriteCond %{HTTP_HOST} ^www\.main-domain\.com$ [NC] 
RewriteRule ^(.*)$ http://main-domain\.com/$1 [R=301,L] 

# BEGIN WordPress 
# <IfModule mod_rewrite.c> 
# RewriteEngine On 
# RewriteBase/
# RewriteCond %{REQUEST_FILENAME} !-f 
# RewriteCond %{REQUEST_FILENAME} !-d 
# RewriteRule . /index.php [L] 
# </IfModule> 

# END WordPress 

Que dois-je changer?

Un grand merci pour votre aide!

+2

Avez-vous enlevé juste une question identique et affiché à nouveau? Cela provoque la perte de toutes les informations attachées (commentaires, réponses ...). N'hésitez pas à * modifier * une question lorsque vous avez besoin de fournir plus d'informations. –

Répondre

3

Avec la configuration actuelle, si vous tapez http://example.com/ dans votre navigateur emplacement bar, il n'y a aucun moyen possible, vous pouvez voir processing.cgi dans cette barre d'adresse à moins que votre script Perl effectue une redirection HTTP (en envoyant l'en-tête Location). Je vous suggère donc de vérifier votre code Perl. Quoi qu'il en soit, je vois ce qui semble être de nombreuses directives dispersées au hasard autour du fichier. Je pense que ce sera plus productif si j'expliquer ce qu'ils signifient:

AddHandler cgi-script .cgi 
Options +ExecCGI 

Activer les scripts CGI et liez l'extension * .cgi de sorte que tout fichier qui se termine par .cgi est considéré comme un programme.

IndexIgnore * 

Demandez à Apache de générer des listes de répertoires vides. Quand les gens ne veulent pas les listes de répertoires, ils normalement juste désactiver les: Options -Indexes

DirectoryIndex processing.cgi 

Lorsque les URL pointe vers un répertoire, trouver et afficher un fichier appelé processing.cgi dans ce répertoire. Envisagez-vous de conserver une copie de votre programme Perl sur chaque répertoire de votre site?

RewriteEngine on 

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

Si l'URL ne correspond pas à un fichier ou un répertoire existant ...

RewriteRule ^(.*)$ processing.cgi/$1 

Lorsque les types d'utilisateurs http://example.com/foo/bar.jpg fonctionnent réellement http://example.com/processing.cgi/foo/bar.jpg. Voir si d'autres règles correspondent.

RewriteRule ^$ processing.cgi [L] 

Lorsque les types d'utilisateurs http://example.com exécutent en fait http://example.com/processing.cgi. Nous en avons fini avec les règles.

RewriteRule ^/$ processing.cgi [L] 

Lorsque les types d'utilisateurs http://example.com/ exécutent en fait http://example.com/processing.cgi. Nous en avons fini avec les règles.

Il est clair maintenant que vous avez beaucoup de règles redondantes. Vos besoins exacts ne sont pas 100% clair pour moi, mais je suppose que vous pouvez savely supprimer la plupart de vos directives:

AddHandler cgi-script .cgi 
Options +ExecCGI 

Options -Indexes 

RewriteEngine on 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)$ processing.cgi/$1 [L] 
+0

Un grand merci pour l'explication. J'ai essayé vos règles et il en résulte une erreur 403. Le problème est, lorsque vous utilisez l'application, je peux voir processing.cgi dans la barre d'adresse. Ainsi, par exemple, l'URL lit: http://domain.com/processing.cgi/add. Je veux qu'il soit simplement domain.com/add – 3zzy

+0

J'ai testé les directives moi-même et ils fonctionnent comme prévu. J'insiste: aucune des directives que vous avez publiées n'effectue une redirection HTTP. Sérieusement. Avez-vous d'autres directives ailleurs? Avez-vous révisé votre code Perl? –

+0

Comment est-il possible que la même application (sans aucun changement) fonctionne bien localement et non sur le serveur. – 3zzy

Questions connexes