2012-07-23 8 views
5

mod_rewrite条件/ルールに奇妙な問題があります。mod_rewriteがcssとjsファイルをロードしていません

これは私が使用している条件とルールです。私がwww.example.comを訪問し、それがうまくロードwww.example.com/pageが、私はロードしようとすると、それがページをロードwww.example.com/page/categoryが、できない場合は

RewriteEngine On 

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

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

私の問題はありますCSSとjavascriptを見つけてください。 /ディレクトリの代わりにpage/cssからロードしようとします。

私が間違っていたことについての考えはありますか?私はここで検索していたし、多くの違いを確認していないようでした

RewriteCond $1 !\.(js|ico|gif|jpg|png|css|html|swf|mp3|wav|txt)$ 

RewriteRule ^(images|css|javascript)(.*)$ index.php?params=$1 [QSA,L] 

を追加しかし、のようないくつかのことを試してみました。

答えて

2

問題を読み取るための

おかげでサイレントリライトは、彼らが実際には別のディレクトリ・パスからページを見ていることを訪問者のWebブラウザを教えてくれないだろうということです。

したがって、/ pageを要求すると、画像とCSSファイルと同様に、Webサーバー上の最上位の公開ディレクトリにあるリソースを参照しているとブラウザが正しく認識します。

しかし、/ page/categoryのリクエストは、ページと呼ばれるサブディレクトリにあるリソースを見ていると誤ってブラウザから去ってしまいます。したがって、ブラウザがCSSとイメージファイルの要求を送信すると、実際には存在しない/ page /サブディレクトリで検索するようにサーバーに要求します。したがって、ブラウザが画像ファイルとCSSファイルを取得しようとすると、サーバーは404コードを返します。

これを回避する1つの方法は、CSS、イメージ、および他のページ参照リソースへのパスを絶対パスに変更することです。フォワードスラッシュで開始して、実際の最上位パブリックディレクトリに相対的に固定されているようにします。更新するリソースパスがわずかである場合は、これが最善の方法です。例えば、変更:

src="image-name.png" 

これは絶対パスを使用してファイルを要求するのではなく相対パスに基づいて間違った場所を推定するためにブラウザを強制する

src="/image-name.png" 

に。

のRewriteCondの必要性を削除するには、次のようにあなたのRewriteRuleを変更することができます。

RewriteRule ^([a-z]+(?:/[a-z]+)*)$ index.php?params=$1 [QSA,L] 

画像やCSSファイルの要求が行われるため、このは、ピリオド(ドット)の記号が含まれているものと一致しません。スキップされる。

1

base elementを使用して、画像の前にある「/」を削除したとお考えですか?

関連する問題