web-dev-qa-db-ja.com

.htaccessを使用してポートとホストを変更します

mod_rewriteを使用して、基本的にサブドメインのポートを別のIPの別のポートにポート転送しようとしています。

このような:

sub.website.com:2000 --> 123.45.67.891:3000 

.htaccessファイルとmod_rewriteを使用して、これをどのように実現できますか?

私は以下を試しましたが、役に立ちませんでした:

RewriteCond %{HTTP_Host} ^sub.website.com$ [NC]
RewriteCond %{SERVER_PORT} ^2000$
RewriteRule ^(.*)$ https://123.45.67.891:3000/$1 [L,R=302]
1
Joshua

.htaccessでこれを使用してみてください。

RewriteEngine On 
RewriteCond %{HTTP_Host} ^sub.website.com:2000 [NC]
RewriteRule (.*) https://123.45.67.891:3000/$1 [R=301,L]

ここで承認された回答を確認することもできます( http://www.webmasterworld.com/Apache/3264071.htm )。 R = 301は永続的なリダイレクトに使用されます。一時的なリダイレクトを使用する場合は、代わりにR = 302を使用してください。

それでも問題が解決しない場合は、Apacheでプロキシを有効にしてみてください:(/ etc/Apache2/httpd.confを編集してください)

LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_http_module modules/mod_proxy_http.so

ProxyRequests Off

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

<VirtualHost sub.website.com:2000>
    ServerName  redirecting
    ServerAdmin [email protected]

    ProxyRequests off
    ProxyPass / http://123.45.67.891:3000
</VirtualHost>

(ここに投稿されたソリューションを見てください Apacheポートフォワーディング )。

0

.htaccessファイルのRewriteRulesでこれを行うのは困難です。問題は、サーバーがURLからファイル名への変換フェーズを通過した後にのみ.htaccessファイルが読み取られることです。サーバーがサービスを提供する必要のあるリソースがファイルシステム上に存在するという(予備的な)結論に達した後でのみ、サーバーは関連する.htaccessファイルの読み取りを開始します。したがって、これらのリクエストに対して.htaccessファイルが読み取られていない可能性があります。これを見つけるには、rewritelogを有効にします。

これは、メインサーバーの構成で行う必要があります。

1