2016-09-19 24 views
0

我有一個Apache服務器,其中主要的rootwebdir是'/ usr/www/users/foo /'和'foo.com'點。不過,我有一些子域名指向自己的目錄中:Apache:避免用戶訪問'www.foo.com/subdomain1/'

subdomain1.foo.com ---> /usr/www/users/foo/subdomain1 
subdomain2.foo.com ---> /usr/www/users/foo/subdomain2 

這使我一個問題:如果有人類型「www.foo.com/subdomain1/aboutme.html」,他們發現「subdomain1.foo.com/ aboutme.html'與另一個URL,我想避免它。

我想知道是否有任何方法通過在/ usr/www/users/foo/subdomain1的'.htaccess'文件中使用指令來避免這種情況(例如,顯示404頁)。

歡迎任何其他解決方案。非常感謝你。

+0

當然,你也可以創建指向被加上兩個條件,一個錯誤的文件重定向規則:域名,並要求相對路徑的組合。然而,問題是:_why_你想這麼做嗎?爲什麼你不簡單保持文檔根分開,一切都很好? – arkascha

+0

因爲我的虛擬主機提供者允許我訪問'/ usr/www/users/foo /',並且在這裏登錄'foo.com'。如果我嘗試創建一個新的'sub1.foo.com'子域,它將登陸'/ usr/www/users/foo/sub1'。 – Hookstark

回答

1

您可以將請求重寫爲特定子域和指向自定義錯誤文檔的特定路徑的組合。這應該最簡單的:

RewriteEngine on 
RewriteCond %{HTTP_HOST} !^subdomain1\.foo\.com$ [NC] 
RewriteRule ^subdomain1 http://foo.com/not-found.html [L] 

這可以在.htaccess樣式文件還是在現實的HTTP服務器主機配置來完成。只要有可能,第二種選擇應該是優選的。 .htaccess樣式文件出了名的錯誤容易出錯,很難調試,並且真的會減慢服務器速度,通常是無用的。它們僅適用於其中一種情況而非可以訪問真實配置(讀取:「廉價主機提供商」)或應用程序需要自己寫入這些文件的情況(這當然是安全噩夢...)。

版本的HTTP服務器的主機配置會略短,更優雅,因爲主機設置含蓄:

RewriteEngine on 
RewriteRule ^/subdomain1 http://foo.com/not-found.html [L] 
1

您可以在任何的子域目錄的即subdomain1/.htaccess使用主要以阻止訪問使用此規則域foo.com

RewriteEngine on  
RewriteCond %{HTTP_HOST} ^(www\.)?foo\.com$ [NC] 
RewriteRule^- [F] 
相關問題