質問するログイン新規登録
Apache

Apacheは、Apache HTTP Serverの略で、最も人気の高いWebサーバソフトウェアの一つです。安定性が高いオープンソースソフトウェアとして商用サイトから自宅サーバまで、多くのプラットフォーム向けに開発・配布されています。サーバーソフトウェアの不具合(NCSA httpd)を修正するパッチ(a patch)を集積、一つ独立したソフトウェアとして開発されました。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

2回答

392閲覧

Apache or .htaccessで、「SSI」 & 「.html拡張子でPHPを使用」両方を実現したい。

shu0328

総合スコア0

Apache

Apacheは、Apache HTTP Serverの略で、最も人気の高いWebサーバソフトウェアの一つです。安定性が高いオープンソースソフトウェアとして商用サイトから自宅サーバまで、多くのプラットフォーム向けに開発・配布されています。サーバーソフトウェアの不具合(NCSA httpd)を修正するパッチ(a patch)を集積、一つ独立したソフトウェアとして開発されました。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

0クリップ

投稿2024/09/14 02:00

編集2024/09/14 02:17

0

0

知りたいこと

「.htaccess」 or 「Apache」で、どのように設定したら以下2点を実現できるか知りたいです。

  1. 拡張子.htmlで、SSIを実現
  2. 拡張子.htmlで、PHPを使用

もし他に、実現できる方法がありましたら
ご教示いただけますと大変助かります。🙏

試したこと

「.htaccess」で以下のように記述すると、
下に書いた方が優先されます。(→ どちらか一方しか適用されない)

AddHandler application/x-httpd-php .php .html AddHandler server-parsed .html

他には、↓こちらも同様。

AddType application/x-httpd-php .html AddOutputFilter INCLUDES .html Options +Includes

バージョン(開発環境:MAMP)

  • PHP:7.3.8
  • Apache:2.0

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

以前に似たような質問がありました。

技術的には対応法が存在するのですが、セキュリティ面でやるべきではない、とのことでした。

投稿2024/09/14 02:51

maisumakun

総合スコア146775

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

shu0328

2024/09/14 03:18

ご教示いただきありがとうございます。 こちら知らなかったです、かなり危険なのですね。。😅
otn

2024/09/14 03:44

IncludesNOEXEC ならコマンド実行は出来ないので「SSIとの組み合わせでサーバー側で不正にコマンド実行されてしまいます」と言うこと自体は無いのですが、徳丸さん(ockeghem)が「避けるべき」と書かれているので、コマンド実行以外にも危険性があるのかも知れません。 あるいは、その質問では Options +Includes と書かれているので、IncludesNOEXEC でなく Includes ならコマンド実行できるので危険と言うだけの話かも知れません。 #include では、普通にURL指定で見られないファイル(.htaccess とか/etc/passwd とか)は見られないし、 危険かもと言うと #printenv とかですかね。
shu0328

2024/09/15 02:24

ご回答ありがとうございます。 知らないことばかりでとても勉強になります💪
guest

0

SSIで出来ることはPHPでも出来るはずなので、あまりニーズがないのかも知れません。
拡張子での指定はPHPかSSIか1つしか駄目なようなので、違う方法でSSIを指定します。

Apache

1XBitHack on

これで「実行可能ビット」がオンならSSIが処理されます。
Windowsだと「実行可能ビット」が無いので駄目かも知れません。以下、Unix/Linux前提です。

1.拡張子でのSSI指定記述を全部削除して、XBitHack onだけ書く
2.SSIを有効にしたいhtmlファイルに対して、chmod +x そのファイル名で実行可能ビットをオンにする
3.ls -l そのファイル名を実行して-rwxrwxr-x等でxが付いていることを確認
4.ブラウザでそのファイルにアクセスしてSSIが効いていることを確認

その上で、拡張子htmlをPHPに関連付ければ、まずPHPで処理されて、その結果に対してSSIが働くようです。

下記はPHPを通さないとSSI構文にならないですが、ちゃんとSSI処理されるので、PHPが先と分かります。

html

1<?php 2echo '<'; 3echo '!--#echo var="DATE_LOCAL" -->'; 4?>

投稿2024/09/14 02:42

otn

総合スコア86424

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

shu0328

2024/09/14 03:18 編集

早速ご回答ありがとうございます。 確かに2点とも、処理されているようです。 ただ文字化けしてしまっているようで、希望は以下の順で実行されるようにしたいです。 こちらは可能でしょうか??? 1. まず拡張子html内でSSI実行 2. 次に拡張子html内でPHP処理
otn

2024/09/14 04:06 編集

> まず拡張子html内でSSI実行 AddInputFilter INCLUDES .html で行けるかも知れません。 これだとPHPの処理結果をSSI処理するわけじゃないので、PHPの脆弱性が影響してくることは無いですね。 これが効くなら、AddOutputFilter INCLUDES .html は消した方が良いかも。 > ただ文字化けしてしまっているようで、 これはこれで対策した方が良いと思います。
shu0328

2024/09/15 02:36

ご回答ありがとうございます、大変助かります。 上記ですが、解説を確認する限りいけそうだったのですけども なぜか「.htmlファイル内でphp実行」のみしか実現できず。。 ・・・・・・・・・・・・・・・・・ Apache、.htaccessそれぞれ記載パターンをかえることで 結果も変わってくるようで、もう少し試してみます。💪 また別の方法でも良いので もしなにかアイデアありましたらご共有いただけますと幸いです。💡
otn

2024/09/15 08:43

Apacheの中での各処理をどの順番で処理するかを書いた図を見たと思いますが、 ぱっと見では見つからず、もしかするとリライト限定だったかもしれません。 > また別の方法でも良いので 回答の1行目に書いたように、PHPで全部書くことですかね。 「PHP部分は改変不可」なので無い限り。
shu0328

2024/09/16 01:47 編集

諸々ご確認ありがとうございます。 1ページ内に、以下の2つが共存するようなページとなっておりまして どちらも問題なく動作するようにしたいです。 (→ どちらか一方だとうまくいくが、両方だと文字化けしちゃうのよね 😭) <!--#include virtual="/include/xxxxx.html" --> <?php echo $xxxxxx;?>
otn

2024/09/16 04:11

> (→ どちらか一方だとうまくいくが、両方だと文字化けしちゃうのよね 😭) 「PHPも処理されて、SSIも処理されている。文字化けだけが問題」 ということであれば、コーディングミスあるいはファイルのエンコーディングがおかしいということなので、今回の質問とは関係ないですね。 自力で解決できなければ、別途質問をするのでしょうか。その場合はコーディングミスの可能性がかなりあるので、現象の発生する最低限(数行程度)のコードの提示が必要です。/include/xxxxx.html と PHPファイルの両方。各ファイルの文字コードのエンコーディング種類と(まあUTF-8でしょうけど)。 また、あまり関係なさそうな気がしますが、Apacheの設定ファイルでエンコーディングに関する箇所があれば、それも。 あと、PHP部分が修正可能なら全部PHPでやればいいので、「どの範囲が修正可能で、どの範囲は修正不可」とかの前提条件も忘れずに。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.30%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問