2016-09-20 53 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

是否有讓你從創建兩個不同的VirtualHosts指向所需目錄的原因嗎? – Eineki

+0

_「和重定向是可見的」_ - 去查看什麼'R'標誌代表。 – CBroe

+0

@CBroe我知道R代表重定向。我發現了一些沒有參數的R等於R = 302的信息 - 臨時移動,它應該被用戶隱藏。 – madbarber

回答

2

你有2個問題,這是造成外部重定向:

  1. 使用R標誌RewriteRule
  2. 使用絕對URL的目標開始http://
  3. 另一個問題是,你重寫規則是無條件的,其能導致無限循環。

您可以使用這些規則:

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