2016-04-24 9 views
1

イメージ、スクリプト、スタイルシートへのすべてのリンクと参照を現在のドキュメントのURLに関係なくいくつかのパスに関連付けることは一般に認められていますか?パスに関連するリンクを持つ(つまり、http:// domain/path /)

始めから始めましょう。 PHPでカスタムコンテンツ管理システムを開発しています。 mod_rewriteを使用して、http://domain.com/path/artist/edit/25などのすべてのリクエストをhttp://domain.com/path/index.php?url=/artist/edit/25にリダイレクトしています。したがって、http://domain.com/path/に続くURLの部分は実際には仮想です。

すべてのリンクは<a href="artist/show">...</a>のような形式で、画像、スクリプトなどへの参照は<link href="ui/css/style.css"...>のような形式にしたいと思います。

まあ、持つ可能であるように思わ:

... 
    <base href="http://domain.com/path/" /> 
    ... 

私は以下のような方法で、スクリプトとスタイルシートにリンクすることができますこの方法:

... 
    <!-- Custom page style CSS --> 
    <link href="ui/css/style.css" rel="stylesheet" type='text/css'> 
    <!-- Support for CSS3 media query in IE8 --> 
    <script type="text/javascript" src="ui/js/respond.js"></script> 
    <!-- MooTools 1.6.0 --> 
    <script type="text/javascript" src="ui/js/MooTools-Core-1.6.0.js"></script> 
    ... 

しかし、<base href=...>が一致している必要があります私の知る限り現在のページリクエスト(http://domain.com/path/artist/edit/25)。そしてそれは全体のコンセプトを破壊する。

私はあなたが明確にする必要がある理由です:

  1. は、ディレクトリにではなく、現在のドキュメントのURLに<base href=...>ポインティングを持っている一般的に受け入れられている慣行ですか?
  2. この練習は、HTML <base>要素の使用要件に準拠していますか?
  3. Googlebotのようなクローラには何らかの影響がありますか?特定のすべてのドキュメントURLに一致するように<base href=...>が必要ですか?

また、URLの一部が仮想である場合に、相対リンクやリソースへの参照の問題をどのように解決するかを知りたいと思います。 WordPressのようなプロジェクトでは、相対リンクを完全に避けて「絶対的なリンク」になる傾向があることを発見しました。

+0

1.はい - ?それは、一般に受け入れられて行われています。 2.群衆には影響しません。 3.この質問のように、主に意見に基づいています。 –

答えて

1

要素base要素の全体は、現在のドキュメントURLの代わりに相対リンクを解決するために使用される任意のベースURLを指定することです。さもなければ、現在のドキュメントのURLがデフォルトでベースURLとして使われるので、要素は意味をなさないでしょう。

主要なクローラは、絶対URLと相対URLの両方と、base要素をサポートします。いくつかのシェイク&ベーククローラーは、相対URLを理解していないか、またはbase要素をサポートしていません(したがって、サーバーログに複数の404行が表示されますが、これは小さな問題です)。

base要素を使用するには、ではなく、をお勧めします。相対リンクはエラーが発生しやすいとなり、重大なメリットは得られませんが、間違った解決URLが返されます。通常、絶対URLを使用する方が合理的で簡単です。

1

を現在のドキュメントURLではなく指しているのは、一般に受け入れられている方法ですか?

いいえ、それはよくありません。実際、私はそれがないとあなたのサイトの論理的な情報アーキテクチャを作成するより良い方法があるので、それは非常に珍しいと言うでしょう。

Googlebotのようなクローラにはどのような影響がありますか?それぞれの特定のドキュメントのURLに一致する必要がありますか?

絶対リンクは、あなたがソースで見ているものです、など

注これは、ベースタグが正しい取得するのは難しいとのGooglebotに透明であり、より良い方法を使用して、あなたが欲しいものを行う方法がありますしかしリンクは物理的にディレクトリやファイルなどにマップされているわけではありません。mod_rewriteのようなツールをApacheで使用すると、物理的なファイルシステムで多くの方法でサイトを構築することができます。物事が変わると、あなたは特定のソリューションに縛られません。これはまた、ほとんどのPHPアプリケーションがindex.phpスクリプトを通してすべてを送信する理由で、アプリケーションはファイルシステムではなく情報アーキテクチャを制御します。

1

"base href"は問題なく使用できますが、必ずしも最適な解決策ではありません。サーバーが異なるサーバー名とパス(たとえば、「http://www.example.com/companysection/especificservice」と「http://service.internalnetwork.dev/」)に応答する場合は問題ありません。

IMHOこれはあなたのケースに最適な解決策ではありません。 URLで

http://example.com/path/index.php?url=/artist/edit/25は、」あなたは、パス(ベースexample.com/path/index.php ?URL =)でクエリの一部を変換したい...とこれは大きな問題になる可能性があります。クエリーも持っているクエリーをどうやって処理しますか? (検索用語やフォームをGETするなど)

ハリーの答え(またはnginx書き換え規則)のように、Apache mod_rewriteが良い選択肢になります。それによって、http://example.com/path/artist/edit/25?search=something&order=ASCのようなリクエストを簡単に "変換"することができますhttp://example.com/path/index.php?url=artist/edit/25&search=something&order=ASC これはあなたに長期的な問題を少なくします。

https://wiki.apache.org/httpd/RewriteQueryStringで最後の例を確認し、それはすべてあなたの書き換えニーズに を果たすのは本当に近いです(あなたはちょうどあなたが適切にクエリの残りの部分を扱うようにする必要があります)

フォームhttp://example.com/path/var/valのURLを取り、 をvar = valクエリhttp://example.com/path?var=valに変換します。本質的に 上記のレシピの逆。この例は、有効な 3レベルのURLで有効です。 http://example.com/path/var/valは、 をhttp://example.com/path?var=valに変換します。

のRewriteRule^/パス/([^ /] +)/([^ /] +)/パス$ 1 = $ 2

関連する問題