0

PHP で MVC フレームワークをゼロから開発しています。主に学習体験のためですが、これは実際のプロジェクトで簡単に終了する可能性があります。このチュートリアルをベースとして実行し、そこから拡張しました。

リクエストは次のように行われます。

examplesite.com/controller/action/param1/param2/ など...

そして、これは私の .htaccess ファイルです:

RewriteEngine on

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule ^(.*)$ index.php?rt=$1 [L,QSA]

したがって、すべてのリクエストは index.php に送られ、そこから正しいコントローラーとアクションにルーティングされます。コントローラーまたはアクションが指定されていない場合、デフォルトの「インデックス」が両方に想定されます。

私のサイトのホームページであるはずの index アクションを備えた index コントローラーがあります。examplesite.com にアクセスするとアクセスできます (インデックス部分が想定されているため)。いくつかの画像、スタイルシートへのリンク、およびいくつかのスクリプトが含まれています。index.php からの相対パスでリンクされています。すべてのリクエストがindex.phpに送られ、すべてのコンテンツがphpを使用してこのページに含まれているだけなので、これで問題ないと思いました。これは、examplesite.com にアクセスすると機能します。すべての画像とスタイルが表示され、スクリプトが実行されます。ただし、examplesite.com/index にアクセスすると、サイトの正しい部分にルーティングされますが、すべてのリンクが機能しません。ブラウザーは、私が別のフォルダーにいると認識していますか?

サイト内のすべてのコンテンツに相対パスを使用できるようにしたいと考えています。それ以外の場合は、すべての場所で絶対パスを使用して確実に表示する必要があるためです。これは可能ですか?

4

2 に答える 2

2

ブラウザーは現在のリクエスト URI に相対的な相対パスを評価するため、絶対パスが必要です (base タグを使用しない場合、以下を参照してください)。ただし、絶対パスにドメイン名を含める必要があるとは限らないことに注意してください。スラッシュで始めるだけで十分です。いわばサーバーからの絶対パスです。

そう:

<img src="/images/bla.gif">

それ以外の

<img src="images/bla.gif">

...うまくいきます。

前述したように、別のアプローチはbase タグを使用することです。しかし、今思い出せない理由から、使用しないことをお勧めします。(他の誰かがここでチャイムを鳴らしたい場合...)

于 2010-04-07T23:19:55.797 に答える
0

IMO 画像、JavaScript、スタイル、およびその他の静的コンテンツは、ルーティング システムの一部であってはなりません。これは、Apache がこれらのファイルを問題なく処理できる場合に、すべての要求に対して PHP をロードすることを意味します (パフォーマンスが大幅に低下します)。

私の .htaccess は常に既存のファイルに PHP をスキップさせます:

# Files with an extension that exist are served up straight.
RewriteCond %{REQUEST_URI} \..+$
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule .* - [L]
于 2010-04-07T23:17:53.243 に答える