-1

この質問に対する明確な答えは見つかりませんでした (しかし、HTML タグは価値があるよりも厄介であると判断しました)。

Web サイトで複数のディレクトリを操作している場合、現在のディレクトリを変更したときに、サイトの残りの部分への相対リンクが機能することを確認するにはどうすればよいでしょうか? サポートディレクトリに移動したときに、「/index.php」へのリンクが実際に「/support/index.php」にリンクすることを望んでいません。

私たちは PHP を使用しているので、出力バッファリングを使用してリンクを変更できますが、他の人に何か良いアイデアがあるかどうかを知りたいです。何らかの方法で Smarty を介して実装することもできます。これに対処する簡単な方法がわからないという理由だけで、複数のディレクトリを使用する Web サイトをゼロから構築したことはありませんが、問題はそれほど難しくないはずです。

(IIS で実行していますが、任意のサーバーで動作させる方がよいことは明らかです。)

4

4 に答える 4

4

base_url 変数を宣言するか、ベース URL を含む定数を宣言することができます

例えば

DEFINE('BASE_URL', 'http://example.com/');

リンクを使用する場合

例えば

<a href="<?php echo BASE_URL; ?>index.php">Home</a>
于 2010-08-02T14:53:28.657 に答える
1

あなたはすでに必要なものをすべて持っています

現在のディレクトリを変更したときに、サイトの残りの部分への相対リンクが機能することをどのように確認しますか?

そのために絶対リンクを使用しています

サポートディレクトリに移動したときに、「/index.php」へのリンクが実際に「/support/index.php」にリンクすることを望んでいません。

幸運なことに、それは決して起こりません

/index.phpは絶対パスであり、/index.php 以外の場所を指すことはありません。

/飾るだけではありません。パスの先頭にあるスラッシュの意味は「ルート ディレクトリ」です。だから、/index.php手段index.php placed in the root directory.
/support/index.phpindex.php placed in the support directory which is placed in the root
簡単な手段を意味します。常に絶対パスを使用してください(無意味なURLではありません)

于 2010-08-02T14:59:53.353 に答える
0

「ベース」URIを2つの場所に保存します。(i)PHP / Zend Frameworkサーバーでは、configuration.xmlファイルにURIなどの従来の値が保持されます。(ii)クライアント側では、より浅く、隠さ<form/>れた状態で、ベースURIなどの他の(セキュリティの妥協が少ない)値が保持されます。

ちなみに、フォームは次のようになります。

<form id="AppSettings" action="#">
    <input type="hidden" id="MyBaseUri" value="http://superuser.com"/>
</form>
于 2010-08-02T18:17:01.717 に答える
-1

タグに追加<base href="http://www.domain.com/">します。<head>これにより、すべての相対リンクが として指定されたディレクトリから開始されhrefます。support/index.php次に、で始まらない/(つまり、ない/support/index.php)などの相対リンクを使用します。

:タグをセクション<base>の最初のタグにします。<head>その後のすべてのリンクはそのベース ディレクトリから解釈されます。(たとえば<link href="relative/path">、上で定義されている場合、ベースディレクトリが既に使用されます。

利点:タグhttp://www.domain.com/pageを変更するだけで、ページ全体をサブディレクトリに移動できます。<base>リンクを使用する/support/index.phpと、常にルート ディレクトリから開始されます (つまりhttp://www.domain.com/) 。

URL 書き換えの動的ベース ディレクトリ:

<?php
    if  (preg_match("/https/i",$_SERVER["SERVER_PROTOCOL"]))
        $protocol = "https";
    else
        $protocol = "http";
    echo '<base href="'.$protocol.'://'.$_SERVER["HTTP_HOST"].dirname($_SERVER["SCRIPT_NAME"]).'/">';
?>
于 2010-08-02T15:07:34.777 に答える