2016-12-26 109 views
1

我在Apache服務器(託管其他非node.js站點)上有一個Node.js應用程序。下面是Apache的安裝程序來發送所有的交通www.mysite.com上到節點上的端口12001:在Apache服務器上使用Node.js來訪問'www'子域

<VirtualHost *:80> 
    ServerAdmin [email protected] 
    ServerName www.mysite.com 
    ServerAlias mysite.com www.mysite.com 

    ProxyRequests off 

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

    <Location /> 
     ProxyPass http://localhost:12001/ 
     ProxyPassReverse http://localhost:12001/ 
    </Location> 

    ErrorLog /var/log/apache2/mysite-error_log 
    TransferLog /var/log/apache2/mysite-access_log 
</VirtualHost> 

而且我想迫使所有的人訪問mysite.com重定向到www.mysite.com

在Node中,我無法檢查req.headers.host,因爲它總是等於localhost:12001,我不確定我應該在哪裏放置任何.htaccess文件。

回答

1

只需在服務器配置中執行此操作,不需要.htaccess。補充一點:

RewriteEngine On 
RewriteCond %{HTTP_HOST} !^www.example.com$ [NC] 
RewriteCond %{HTTP_HOST} !^$ 
RewriteRule (.+) http://www.example.com$1 [R=301,L] 

(我不得不使用標準example.com,而不是你的榜樣域作爲系統拒絕了)

這是說重定向東西都使用主機www.example.com,除非沒有主機指定(以避免在沒有主機頭的情況下提供請求時發生循環)到www.example.com

這樣做,所以它可以處理拼寫錯誤,如ww.example.com(缺少w),如果您添加適當的ServerAlias(也許* .example.com)和DNS條目(也可以使用通配符),也可以涵蓋了你所要求的,你不必這樣做。

它還保留了URL的休息,所以:

http://example.com/testing 

會重定向到:

http://www.example.com/testing 
相關問題