2

次のmod_rewriteルールにより、私のWebサイトが奇妙に動作します。localhost/signin/と入力します。

Options +FollowSymLinks
RewriteEngine On

RewriteRule ^signin/?$ access.php [NC,L]

相対リンク付きの添付ファイル(images、css、php、js)がすべて読み込まれませんか?しかし、localhost / signinと入力すると、何も問題がないように、すべての添付ファイルが読み込まれます。これは、/ signin /がディレクトリのように扱われ、すべての相対リンクが、添付されているすべてのファイルの存在しないディレクトリを検索するために発生すると思います。

編集:私は解決策を見つけましたが、それは私が望むものではない私のマークアップを混乱させることを含みます。以下の私の答えを見てください、そしてあなたは見るでしょう。

ただし、これらの添付ファイルは書き換えルールで無視してほしい。

4

3 に答える 3

4

問題

あなたが抱えている問題は(明確化後)リライトルールの使用とは関係ありません。問題を正確に表すために質問を編集してください。

次のような参照があるため、ほぼ確実です。

<link rel="stylesheet" type="text/css" href="css/foo.css">
<script src="js/foo.js">

つまり、css / jsファイルを見つけるために使用されるルートは、現在のリクエストのディレクトリ(仮想または実)に依存します。

現在のリクエストが/fooの場合、リクエストはルートディレクトリにあります。そのため、次のURLが要求されます。

/css/foo.css
/js/foo.js

ただし、現在のリクエストが/ foo /の場合、リクエストはdirにあり/foo/ます。そのため、次のursが要求されます。

/foo/css/foo.css
/foo/js/foo.js

絶対URLを使用する

これを回避する方法は、リンク/スクリプトタグで絶対URLを使用することです。

<link rel="stylesheet" type="text/css" href="/css/foo.css">
<script src="/js/foo.js">

そうすれば、現在のURLに関係なく、リンクとスクリプトタグの正確なURLが使用されます。

ベースタグ-注意してください

あなた自身の答えであなたが注意するようにあなたはベースタグを使うことができます-しかしそれを頼らないことははるかに明白です。一部のブラウザには、「#」を「/#」のリクエストに変換するなどの問題もあります。これは、ベースタグの存在を無視するもう1つの理由です。

于 2012-08-18T21:46:26.960 に答える
1

十分に長く検索した後、私は使用できることがわかりました:

<base href="/beta/" />

各HTMLファイルのheadセクションで、相対パスを修正します。この方法はマークアップを混乱させるので、あまり気にしません。他の誰かがアイデアを持っているなら、私とそれらを共有してください。

ちなみに私はMacbookProでMAMPProを使用しています。

于 2012-08-19T03:20:26.777 に答える
1

私には適切な答えに賛成するのに十分な担当者がいないので、ここにあります:StormyWeatherによる答えは従うのが非常に良いことです。

すべてのファイルを直接提供するだけでなく、フォルダーに対してもこれを行います。これは、新しい一時プロジェクトを開始する場合、またはテストコードをすばやく作成する必要がある場合に非常に便利です。index.phpを含む新しいディレクトリを作成するだけで、サーバーはそれを問題なく提供します。

もちろん、-dフラグがなくてもこれは機能しますが、ファイル名全体も入力する必要があり、非常に混乱する可能性があります。

とにかく、私は私の上の答えに賛成することを好んだでしょうが、残念ながら。

于 2012-08-18T22:00:00.307 に答える