web-dev-qa-db-fra.com

Apache htaccess a pour résultat que les fichiers sont téléchargés au lieu d'être affichés

J'ai donc eu ce "beau" site Web qui a fait exactement ce que je voulais qu'il fasse. Ensuite, j'ai éteint mon ordinateur, redémarré et ... les pages se téléchargent maintenant au lieu d'être affichées.

J'ai réinstallé XAMPP, lancé à nouveau Apache et identifié le fichier . Htaccess comme étant la cause du problème.

Options +FollowSymlinks
RewriteEngine on 

RewriteCond %{QUERY_STRING} !^desktop
RewriteCond %{HTTP_USER_AGENT} "Android|blackberry|googlebot-mobile|iemobile|iphone|iPod|#opera mobile|palmos|webos" [NC]
RewriteRule ^/?$ /mobile/index [L,R=302]    
RewriteRule ^/?$ /de/index [R]
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME}\.html -f 
RewriteRule ^(.*)$ $1.html

Voici le problème, je suppose:

RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME}\.html -f 
RewriteRule ^(.*)$ $1.html

Cela devrait permettre d’utiliser /de/index au lieu de /de/index.html - mais d’une manière ou d’une autre, la page sera téléchargée si j’ouvre localhost/de/index (mais avec localhost/de/index.html, cela fonctionne très bien ... ).

J'utilise des sites HTML avec SSI Elements sur un serveur Web Apache. Le seul autre fichier différent de celui qui est prêt à l'emploi est le fichier httpd.conf , où j'ai activé SSI:

AddType text/html .shtml
AddHandler server-parsed .shtml
AddHandler server-parsed .html
AddHandler server-parsed .htm
Options Indexes FollowSymLinks Includes
AddOutputFilter INCLUDES .shtml
Options +Includes

J'espère donc que quelqu'un parmi vous pourra m'aider à résoudre ce problème car je suis plutôt désespéré ... pour une raison quelconque, même sans les lignes problématiques Chrome continue de télécharger les fichiers (même si je supprime le fichier . htaccess ), tandis que IE et Opera affichent les pages.

Edit: Now Opera veut également télécharger des fichiers (que ce soit index.html ou index sont appelés).

2
chrissik

Les navigateurs proposent de télécharger des fichiers basés sur deux en-têtes:

J'utilise un outil de ligne de commande appelé curl pour vérifier les en-têtes sur un site Web.

curl -s -D - 'http://example.com/' | head -n 20

Si vous ne voulez pas que vos pages soient téléchargées, le Content-Type doit être réglé sur text/html ou text/html;charset=UTF-8 et il ne doit pas y avoir d'en-tête Content-Disposition.

Les navigateurs proposeront de sauvegarder les pages en téléchargement si l'en-tête Content-Type ressemble à application/octet-stream. Une boîte de dialogue de téléchargement sera également présentée s’il existe un en-tête Content-Disposition tel que attachment; filename=foo.html.

Vous pouvez généralement contrôler les Content-Type à .htaccess en utilisant la directive AddType comme ceci:

AddType text/html .html

Je vois que vous le faites déjà pour les fichiers .shtml. Vous devrez peut-être faire de même pour d'autres extensions telles que .html et .htm.

Il s'agit alors du type par défaut pour les fichiers portant ces extensions, mais s'ils sont sauvegardés par une application Web, le code qui exécute cette application Web a généralement la capacité de les remplacer. La plupart des frameworks d'applications Web ont une sorte de directive setHeader qui peut être utilisée pour définir à la fois Content-Type et Content-Disposition. En plus de vérifier votre fichier .htaccess, vous devez également vérifier le code qui alimente votre site Web.

1