dポイントプレゼントキャンペーン実施中!

構造は以下のとおりです。

ルートディレクトリ

├ index.php
├ php(フォルダ)
│ └ a.php

├ html(フォルダ)
 └ menu.html
 └ b.html
 └ c.html

メニューと実際のコンテンツを分けようと思い、index.phpでrequireを用いて、実際のコンテンツである「b.html」とメニューである「menu.html」を読み込んでいます。

メニューには、A href="php/a.php"という具合にリンクを貼っています。

「c.html」に飛ぼうとする際は、a.phpにリンクを貼り、そこで「menu.html」と「c.html」を読み込むという具合です。

その際、一度目(ルートディレクトリ基準)は正常に読み込みます。
その際のパスはhttp://省略/php/a.phpです。

しかし、a.phpに飛ぶと、a.phpを基準にしたパスになってしまいます。ですから、a.phpで再びmenuのリンクをクリックしてa,phpに飛ぼうとすると、パスが

http://省略/php/php/a.php

となってしまって上手く読み込めません。

分かりにくい説明で申し訳ありません。

これを解決するには、絶対パスを使って指定するしかないのでしょうか?

A 回答 (2件)

そういった時、私は絶対参照を指定するようにしています。


但し、カレントURLがズレるから悪いのだから、ズレない
URLを持ちます。

必ず読み込むconfig用ファイルを用意し、その中にルートURLを
定義して、リンクを記述するhtmlファイルをphpファイルに
変更して、リンク指定に、ルートURLを指定した上でphp/a.phpと指定します。

config.php
define(ROOT_URL, "http://localhost/");

c.php
<a href="<?= ROOT_URL ?>php/a.php">~</a>
という感じに。
環境が変わりURLに影響があったら、config.phpを
変更するだけで対処可能です。

というのを、昔やりました。

実際の処理にPHPを利用しているのだから、htmlしか
出力しないからhtmlファイルとしていても、PHPとして
動作させたって支障はないはずです。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
経験に基づく具体的な方法を示していただき、参考になります。
調べても、解決策が出てこないので、この方法でいこうかと思います。
ありがとうございました。

お礼日時:2007/07/26 21:31

a.phpにも


<a href="php/a.php">a.php</a>のようなリンクが張っているのでしょう?

やはり絶対パスを使って指定するほうがいいと思います。

どうしても相対パスを使いたければ、a.phpでパスの判断が必要ですね。例えば
$currdir = getcwd();
if( preg_match("/(\/php)$/", $currdir ) echo "a.php";
else echo "php/a.php";

以上のプログラムはイメージです。動くかどうか確認していません。

ご参考まで
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
やはり絶対パスを使うのが懸命なようですね。
おとなしく絶対パスを使用したいと思います。
相対パスの際のプログラムのイメージも記述していただき、ありがとうございました。

お礼日時:2007/07/26 21:33

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!