web-dev-qa-db-ja.com

Apache htaccessにより、ファイルが表示される代わりにダウンロードされる

それで、私はそれがやりたいことを正確にしたこの「美しい」ウェブサイトを持っていました。その後、PCをシャットダウンし、再起動すると...ページが表示される代わりに、今すぐダウンロードされます。

XAMPPを再インストールし、Apacheを再度起動したところ、問題の原因として。htaccessファイルを特定できました。

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

これは私が推測する問題です:

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

これにより、/de/indexの代わりに/de/index.htmlを使用できるようになりますが、localhost/de/index(ただしlocalhost/de/index.htmlを使用すると正常に動作します... )。

Apache WebサーバーでHTMLサイトとSSI要素を使用しています。すぐに使用できるファイルとは異なる他のファイルは、httpd.confのみです。ここでは、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

だから私はあなたの中で誰かがこの厄介な問題を助けてくれることを願っています。私はかなり絶望しています...何らかの理由で、問題のある行がなくてもChromeはファイルをダウンロードし続けます(削除しても。htaccessファイル)、IEおよびOperaはページを表示します。

編集:Operaもファイルをダウンロードしたい(index.htmlまたはindexが呼び出されます)。

2
chrissik

ブラウザは、2つのヘッダーに基づいてファイルをダウンロードします。

curl というコマンドラインツールを使用して、Webサイトのヘッダーを確認します。

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

ページをダウンロードしたくない場合は、Content-Typetext/htmlまたはtext/html;charset=UTF-8に設定し、Content-Dispositionヘッダーがないようにする必要があります。

Content-Typeヘッダーがapplication/octet-streamのようなものである場合、ブラウザーはページをダウンロードとして保存することを提案します。 Content-Dispositionなどのattachment; filename=foo.htmlヘッダーがある場合は、ダウンロードダイアログボックスも表示されます。

通常、次のようなAddTypeディレクティブを使用して、Content-Typeから.htaccessを制御できます。

AddType text/html .html

.shtmlファイルに対して既にこれを行っていることがわかります。 .html.htmなど、他の拡張機能についても同じようにする必要がある場合があります。

これは、これらの拡張子を持つファイルのデフォルトのタイプですが、Webアプリケーションによって裏付けられている場合、そのWebアプリケーションを実行するコードは通常、それらをオーバーライドする機能を備えています。ほとんどのWebアプリケーションフレームワークには、Content-TypeContent-Dispositionの両方を設定するために使用できるある種のsetHeaderディレクティブがあります。 .htaccessファイルを確認することに加えて、Webサイトを動かすコードを確認する必要があります。

1