質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.50%
PHP

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

Smarty

Smartyは、PHPアプリケーションで使用されるテンプレートエンジンです。

Q&A

2回答

1682閲覧

PHP (Smarty) で下層ページが404エラー

asdhfak

総合スコア5

PHP

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

Smarty

Smartyは、PHPアプリケーションで使用されるテンプレートエンジンです。

0グッド

1クリップ

投稿2020/06/10 03:15

編集2022/01/12 10:55

前提

テンプレートエンジンにSmartyを用いたPHPプロジェクトの改修を行っています。
既に本番公開されている現状ソースコードをもらったのですが、うまくページが表示されません。
具体的には、トップの / にはアクセスできますが、下層ページ /hoge/ にアクセスができません(レンダリングされません)
ディレクトリ構造は下記のような形です。

plain

1index.php // ここで templates/index.html をレンダリング ($smarty->display("index.html")) 2templates 3└ index.html // 表示される 4└ hoge // 表示されない 5 └ index.html

質問

どうすれば下層ページの /hoge/ が表示されるのでしょうか?

また、そもそもの質問で申し訳ないのですが、 /hoge/ にアクセスした際はどのphpが実行されるのでしょうか。

試したこと

/hoge.php を作成してそこで、templates/hoge/index.html に対してのレンダリング処理 ($smarty->display("hoge/index.html")) を記述してみました。
が、そもそも/hoge/にアクセスしたときにhoge.phpが読まれないので、404エラーは変わらずでした(当然ですが、、)

考えられる原因

  • もらった現状コードが古い

=> 本番環境では表示されているので、上がっているコードとは違う古いコードとかを共有された可能性

  • 環境の問題

=> 本番とは異なる環境になるので、そこで引っかかっている可能性

  • ケアレスミス

=> なにかしらの凡ミスの可能性

エラーメッセージ

/hoge/ アクセス時↓

plain

1Not Found 2The requested URL /hoge/ was not found on this server.

開発環境

plain

1テンプレートエンジン : Smarty 2MAMP (v5.3) 3 └ PHP (v5.6.40) 4 └ MySQL (v5.7.25) 5 └ Webサーバー : Apache

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

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

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

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

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

hentaiman

2020/06/10 03:27

同じものが本番で動いてるのに自分で構築した環境だと動かないなら自分の環境の問題です 環境のDiffを取りましょう ソースと環境全情報をネットで提示すること自体が不可能だと思うので身近な本物の技術者に聞くのが一番でしょうね
guest

回答2

0

また、そもそもの質問で申し訳ないのですが、 /hoge/ にアクセスした際はどのphpが実行されるのでしょうか。

質問に記載されている内容からは判断できません。

/hoge/にアクセスしたものが他のPHPで処理されるのはPHP側の処理では無くて、webサーバ(.htaccessを含む)の機能です。
(mod_rewriteで実現されることが多いです。
全てのアクセスをindex.phpに集約した後にPHP側の実装でルーティングを行う事も多いですが、最初にindex.phpに集約するのはPHPでは出来ません。)

良くある引っ掛かりポイントとしては

  • mod_rewriteがApacheに読み込まれていない、インストールされていない
  • AllowOverrideディレクティブがディレクトリに対して正しく設定されていない
  • .htaccessやApacheのconfに記述されているmod_rewriteの設定が移設できていない

あたりですね。
そのあたりに絞って旧環境と新環境で環境に違いが無いかを確認してみてください。

投稿2020/06/10 03:43

編集2020/06/10 03:48
tanat

総合スコア18709

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

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

asdhfak

2020/06/10 04:02

ご回答ありがとうございます! > /hoge/にアクセスしたものが他のPHPで処理されるのはPHP側の処理では無くて、webサーバ(.htaccessを含む)の機能です。 なるほど、webサーバー側での処理なのですね。 ソースコードをもらった際に .htaccess は共有されていなかったので、おそらくここが原因のようですね、、 .htaccess が手元にあるか先方に確認してみようと思います。
tanat

2020/06/10 04:08

.htaccessに書けることはApacheのconfにも書けるので、 Apacheのconf .htaccess あたりの連携は必須ですね。 その他、連携出来ていないことも多いでしょうから、質問の内容をそのまま先方にぶつけて聞いてみるのがベストかと思います。
guest

0

質問者さんの 文を読んでいると、テンプレートの階層構造と アクセスしてくる階層構造を 混同しているように思われますが・・・。(わたしの勘違いでしたらごめんなさい)

基本的なインストール

の「ファイル構造」の部分は理解してらっしゃるでしょうか?

投稿2020/06/10 03:38

showkit

総合スコア1638

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

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

asdhfak

2020/06/10 04:04

ご回答ありがとうございます。 > 「ファイル構造」の部分は理解してらっしゃるでしょうか? 深く理解できていなかったので、再度確認してみます。 ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問