1

私はこれについてしばらく疑問に思っていましたが、Web アプリ (RoR、Sinatra、PHP など) でリンクを作成するとき (メソッドで生成するか、ドメインのルートにいるかどうかに関係なく、適切な場所に移動します: http://www.example.com/またはhttp://www.example.com/this/is/where/the/アプリ/は/

私の考えでは、エンド ユーザーにアプリの構成のどこかにドキュメント ルートを指定してもらい、それを使用してもらいますが、エンド ユーザーが何も構成しなくてもよい方法を考えようとしています。

編集:エンドユーザーとは、サーバー上でアプリケーションをセットアップする人を意味します。

編集:先頭の「/」を使用して、常にドメインに関連するリンクを取得できますが、問題は、アプリ自体がルートになく、http://www.example.com/thisのような場所にある場合です/is/where/the/app/is/だから私は言いたいgen_link('/')そしてそれを返す/this/is/where/the/app/is/gen_link('/some/thing')、そして返す/this/is/where/the/app/is/some/thing

4

4 に答える 4

3

base要素を HTML レイアウトの head に設定してみてはどうでしょうか。
まず、URL を取得します。Ilyaが提案する方法で(PHPが問題ない場合)。その後、base次のようにタグを使用できます。

<base href="<?= $full_site_url ?>" />

これにより、すべてのリンクのデフォルト URL が設定され、ブラウザはページ上のすべての相対リンクにそれを追加します。

于 2009-02-18T19:34:34.100 に答える
1

まず、何らかの URL リライター機能を使用して、すべての URL をルーティングする必要があります。

したがって、次のことはもうありません。

<a href="some/path/">Foo</a>

しかし、代わりに次のようなものです:

<a href="<%= url_for('some/path') %>">Foo</a>

そこにあるすべてのWebフレームワークには、このような機能があります。それらは通常、そこであらゆる種類の魔法を実行しますが (MVC コントローラーのパスとビューなどを処理するため)、関数の最後で (概念的に)、それらはすべて「ルート」を使用して URL を先頭に追加します (例: "/this/is/where/the/app/is/")。ハードコーディングされたベースパスから独立した URL をアプリケーションで作成できます。

RoR は、 と呼ばれる構成ディレクティブを使用します"relative_url_root"

Symfony (php) は、 とも呼ばれる構成ディレクティブを使用します"relative_url_root"

CakePHP は と呼ばれる設定ディレクティブを使用します"WEBROOT_DIR"

これらのフレームワークが Apache で実行されている場合、この値は動的に計算されることがよくあります (明示的に設定していない場合)。他の Web サーバーでは、環境変数が利用できないか正しくないことが多いため、この値を一貫して決定することはできません。

于 2009-02-18T15:49:07.980 に答える
0

必要なものはすべて自分で決定できます。構成は必要ありません。

PHPの例を次に示します(たとえば、index.phpがスクリプト名であるとします)。

<?
  $folder_on_server = substr ($_SERVER['PHP_SELF'], 0, strpos ($_SERVER['PHP_SELF'], '/index.php'));
  $server_name = $_SERVER['SERVER_NAME'];
  if (80 != $_SERVER['SERVER_PORT']) {
    $server_name .= ':'. $_SERVER['SERVER_PORT'];
  }
  $full_site_url = 'http://'. $server_name . $folder_on_server;
?>

これで、いつでも次のようなリンクを作成できます。

<a href="<?= $full_site_url ?>/some/thing/">Something</a>

コメントの説明も参照してください。

于 2009-02-18T15:23:55.340 に答える
0

イリヤの答えは良いものですが、これを行うより簡単な方法は、すべてのリンクの先頭に「/」を付けるだけだと思います。これにより、それらは常にドメインのルートに対して相対的になります。

<a href="/some/thing">Something</a> <!-- Always links to www.domain.com/some/thing -->
<a href="some/thing">Something</a> <!-- Acutal destination depends current path -->
于 2009-02-18T15:32:09.720 に答える