2016-09-20 16 views
1

ドメインwww.domain.comと複数のサブドメインsub1.domain.com、sub2.domain.comを持つサーバーがあります。それらはすべてサーバールートを指しています。ユーザーからの.htaccessリダイレクトを非表示にする方法

ユーザーがサブドメイン別に特定のフォルダにアクセスできるようにしたいと考えています。例えば:

  • sub1.domain.com/someURI => sub1.domain.com/subFolder1/someURI
  • sub2.domain.com/someURI => sub1.domain.com/subFolder2/someURI

これらのリダイレクトをユーザーから非表示にします。 .htaccessファイルに続いて試してみました。

RewriteEngine on 
RewriteBase/

RewriteCond %{HTTP_HOST} ^sub1.domain.com$ 
RewriteRule ^(.*)$ http://sub1.domain.com/subFolder1/$1 [R,L] 

RewriteCond %{HTTP_HOST} ^sub2.domain.com$ 
RewriteRule ^(.*)$ http://sub2.domain.com/subFolder2/$1 [R,L] 

URIがなくてもリダイレクトが正しく行われ、リダイレクトが表示されます。

+0

は、必要なディレクトリを指す2つの異なる仮想ホストを作成してからあなたを保つ何らかの理由はありますか? – Eineki

+0

_ "リダイレクトが見える" _ - goは 'R'フラグの意味を調べます。 – CBroe

+0

@CBroe私はRがリダイレクトを表していることを知っています。私は、パラメータなしのRがR = 302の一時的な移動に等しいという情報を見つけました。それはユーザーから隠されるべきです。 – madbarber

答えて

2

あなたは外部へのリダイレクトを引き起こしている2つの問題があります:ターゲットにhttp://で始まる絶対URLを使用RewriteRule

  • Rフラグを使用して

    1. もう一つの問題は、あなたの書き換えルールができる無条件であるということです無限ループを引き起こします。

    あなたはこれらのルールを使用することができます。

    RewriteEngine on 
    RewriteBase/
    
    RewriteCond %{HTTP_HOST} =sub1.domain.com 
    RewriteRule ^((?!subFolder1/).*)$ subFolder1/$1 [NC,L] 
    
    RewriteCond %{HTTP_HOST} =sub2.domain.com 
    RewriteRule ^((?!subFolder2/).*)$ subFolder2/$1 [NC,L] 
    
  • +0

    それは魅力的なように働いています。ありがとうございました!あなたがRewriteRuleについて説明してもらえますか? – madbarber

    +0

    'RewriteRule'は負のルックアヘッドを追加したものとほぼ同じです。'(?!subFolder1 /) 'は転送要求が既に'/subFolder2/' – anubhava

    関連する問題