ここは私の状況です。私は、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
- をチェック"/ site1 /"で始まらない
これらの条件がすべて満たされている場合、リクエストはリクエスト前に "/ site1 /"の前に書き換えられます。私は3番目の条件で "site1"の代わりに(\ w +)をマッチさせ、4番目の条件とルールで%1を参照するConds/Rulesの単一のセットを試してみましたが、これは機能しませんでした。私はこれをあきらめて解決しました。
を動作するが、私は 'のRewriteRule^$/SITE1/$ 1'行うとき、それはApacheが内部サーバーエラーを発行する原因となる(*を。)。しかし、私にとっては、それは単に個々のルールの一般的な同等物でなければならないようです! – denaje
私の編集を参照してください、それはループを解決します。 –
ああ、意味があります。これは1つのサイトでは機能しますが、複数のサイトをサポートするにはどうすればよいですか?追加の条件として 'RewriteCond%{HTTP_REFERER}/site /'を追加しようとしました。リクエストを書き直す前にREFERERをチェックします。しかし、/page1.htmへのリンクをクリックすると、/ site/page1.htmに内部的に書き直されているにもかかわらず、/page1.htmがURIとして表示されるため、これは最初のページを過ぎても機能しません。次に、2番目のリンクをクリックするとREFERERが正しくなくなり、書き換えルールは適用されません。助言がありますか? – denaje