2011-11-09 11 views
0

申し訳ありませんが、私はそれは彼らが取られますuser.site.com私のサイトのタイプのユーザーであればそのようにしたい...Apache - サブドメインを場所に書き換えますか?

を、私はこの作業を取得するために時間試してみましたが、私は進展していませんsite.com/userが表示されますが、URLはまだuser.site.comと表示されます。これどうやってするの? .htaccessで?サーバーファイルですか?

答えて

1

ケン

RewriteEngine On 

RewriteCond %{HTTP_HOST} !www.site.com$ [NC] 
RewriteCond %{HTTP_HOST} ^([a-z0-9-_]+).site.com [NC] 
RewriteRule (.*) %1/$1 [QSA,L] 

% 1 = .site.com前に何

$ 1 =あなたはtest.site.com/fooを持っている場合は、/

後に得たもの。 phpの場合は/test/foo.phpになります。 テストをしたいだけなら、$ 1を忘れてください。

QSA =クエリ文字列の追加、 L =最後。

@phihag投稿のmod_rewriteに関するURLを読んでください。

1

使用mod_rewrite

RewriteEngine On 
RewriteBase/
RewriteCond %{HTTP_HOST} !www.site.com$ [NC] 
RewriteCond %{HTTP_HOST} ^([a-z0-9-_]+).site.com [NC] 
RewriteRule (.*) %1/$1 [QSA,L] 

あなたはどちらか、リソースへのリンクをフル(http://site.com/user/static/x.css)を使用するか、または相対(static/x.css)のURLにしたい場合。このルールが有効な場合、絶対URL(/user/static/x.css)の作成が異なる必要があります。ほとんどが

+0

それはうまくいきませんでした。:( –

+0

%2は存在しないので、エラー500になるはずです。 – malletjo

+0

@Ken、racarおっと、 %2'の代わりに%1'を使用しています。 – phihag

0

アドレスバーに元のアドレスを保持するには、リダイレクトではなくリバースプロキシが必要です。リダイレクトは、別のアドレスを持つサーバーに2番目の要求を送信するようブラウザに指示します。リバースプロキシは、別のページを見つけてブラウザに通知せずにサーバーに送信します(これは私が信じたいものです)。リバースプロキシはmod_rewite

に[P]フラグを使用して達成されていることを確認mod_rewritemod_proxymod_proxy_httpがロードされていることを確認し、仮想ホストuser.site.comのための構成や.htaccessファイルにディレクティブ

<Proxy *> 
    Order deny,allow 
    Allow from all 
</Proxy> 

RewriteEngine on 

RewriteRule ^/(.*) http://site.com/user/$1 [PL] 

を置きますあなたがroot権限を持っていない場合。これにより、サブドメインからメインドメインフォルダへのすべてのページがプロキシされます。代わりにインデックスページをプロキシする場合は、代わりにRewriteRule ^/ http://site.com/userを使用してください。

httpsを使用していないと仮定します。もしそうなら、少し複雑になります...

関連する問題