2011-11-09 22 views
0

ここは私の状況です。私は、Webルートと複数のサブディレクトリを持っている、のは言わせて:Apache .htaccess RewriteRule

/var/www 
/var/www/site1 
/var/www/site2 

により一定の制限のために、私は1つのドメインを維持し、このような個別のフォルダを持っている能力を必要としています。これは私のために正常に動作しますが、両方のサイトには多くのJSとCSSの参照は次のようなものを指している:これらのファイルが絶対的に参照されているので、彼らは「JS」と「CSS」ディレクトリ内を探している

"/js/file.js" 
"/css/file.css" 

/var/wwwはもちろん存在しません。 RewriteRulesを使用して、絶対参照されるファイルの要求を正しいサブディレクトリを指すようにリダイレクトする方法はありますか?でもSITE1とSITE2の両方を扱うもちろんのこと、1つのディレクトリのみにリダイレクトする、

RewriteEngine on 
RewriteRule ^/$ /site1 

または

RewriteEngine on 
RewriteRule ^/js/(.*)$ /site1/js/$1 
RewriteRule ^/css/(.*)$ /site1/css/$1 

しかし、これらの作業のどちら:私のようなことをやって試してみました。私がしようとしていることは可能ですか?

EDIT:SOLUTION

私は私の状況に合わせてJonのアドバイスを適応させることになりました。私は、新しいサブディレクトリが追加または削除されるたびに、.htaccessファイルをプログラム的に変更する機能を持っています。私が欲しい各「サイト」のために、私は私の.htaccessに次のセクションがあります。

RewriteCond %{REQUEST_URI} !^/$ 
RewriteCond %{REQUEST_URI} !^/index.php$ 
RewriteCond %{HTTP_COOKIE} sitename=site1 
RewriteCond %{REQUEST_URI} !^/site1/ 
RewriteRule ^(.*)$ /site1/$1 [L] 

のindex.phpは、すべて私のサイトをリストするファイルである「サイト名」クッキーを削除し、のクッキーを設定し、特定のものが選択されると、 "sitename = site#"が表示されます。リクエストがクッキーが含まれている場合、要求は/index.php

  • のためではない場合、要求は/
  • のためではない場合は私のRewriteCondsが要求した場合
  • 「サイト名= SITE1」、

    1. をチェック"/ site1 /"で始まらない

    これらの条件がすべて満たされている場合、リクエストはリクエスト前に "/ site1 /"の前に書き換えられます。私は3番目の条件で "site1"の代わりに(\ w +)をマッチさせ、4番目の条件とルールで%1を参照するConds/Rulesの単一のセットを試してみましたが、これは機能しませんでした。私はこれをあきらめて解決しました。

  • 答えて

    1

    あなたの.htaccessファイルにRewriteRulesがある場合は、一致する行頭のスラッシュを削除する必要があります(apacheはそれらを削除してからmod_rewriteに送ります)。これは機能しますか?

    RewriteEngine on 
    RewriteRule ^js/(.*)$ /site1/js/$1 
    RewriteRule ^css/(.*)$ /site1/css/$1 
    

    編集:コメントに対処するには、次の

    はい、動作しますが、私はRewriteRule ^(.*)$ /site1/$1を行う際には、内部サーバーエラーを発行するようにApacheを引き起こします。しかし、私にとっては、それは単に個々のルールの一般的な同等物でなければならないようです!/something//site/something/に書き換えますとき、そのルールで何が起こっている

    で、Apacheは、内部など

    あなたが必要と思い、再度、再度/site/site/something/に、それは再びをを書き換えます、リダイレクト、それに何か条件を追加する:はい、

    RewriteCond %{REQUEST_URI} !^/site/ 
    RewirteRule ^(.*)$ /site/$1 [L] 
    
    +0

    を動作するが、私は 'のRewriteRule^$/SITE1/$ 1'行うとき、それはApacheが内部サーバーエラーを発行する原因となる(*を。)。しかし、私にとっては、それは単に個々のルールの一般的な同等物でなければならないようです! – denaje

    +0

    私の編集を参照してください、それはループを解決します。 –

    +0

    ああ、意味があります。これは1つのサイトでは機能しますが、複数のサイトをサポートするにはどうすればよいですか?追加の条件として 'RewriteCond%{HTTP_REFERER}/site /'を追加しようとしました。リクエストを書き直す前にREFERERをチェックします。しかし、/page1.htmへのリンクをクリックすると、/ site/page1.htmに内部的に書き直されているにもかかわらず、/page1.htmがURIとして表示されるため、これは最初のページを過ぎても機能しません。次に、2番目のリンクをクリックするとREFERERが正しくなくなり、書き換えルールは適用されません。助言がありますか? – denaje

    0

    サーバレベルの絶対リンクがセントラルサイトホスティングアカウントへのシンボリックリンクに従うように、書き換えルールが使用するsymlinksを設定する必要があります。