同じサーバー上の特定のポートにリダイレクトしたいサブドメインがいくつかあります。私が持っていると言います
dev.mydomain.com
dev.mydomain.com
からmydomain.com:8080
に透過的にリダイレクトし、元のサブドメイン名とブラウザのURLを保持したい。
Apache 2.2でこれを行うにはどうすればよいですか?デフォルトポート80
でApache 2.2を実行しています。これを実現するための書き込み構成を理解できません。
DNSでdev.mydomain.com
に解決するようにmydomain.com
を設定しました。
これは、ルーティング不可能なIPアドレスを持つイントラネット開発サーバー用なので、公開されているサーバーを危険にさらす悪用やセキュリティについてはそれほど心配していません。
これが、マイルスエリクソンによって正しい方向に設定された後、私が最終的に思いついたものです。リダイレクトされたサーバーとポートではなく、リクエストの元のサブドメイン/ドメインをアドレスバーに反映させたいのですが、VirtualHost
を使用してGoogleへの正しい解決策を提示し、最終的に次のような解決策を見つけましたmod_proxy
の使用が含まれています。
<VirtualHost *:80>
ServerAdmin [email protected]
ServerName dev.mydomain.com
ProxyPreserveHost On
# setup the proxy
<Proxy *>
Order allow,deny
Allow from all
</Proxy>
ProxyPass / http://localhost:8888/
ProxyPassReverse / http://localhost:8888/
</VirtualHost>
Dev.mydomain.comをmydomain.comのIPに解決できると想定すると、httpd.confに以下を追加できます。
NameVirtualHost *:80
<VirtualHost *:80>
ServerName dev.mydomain.com
redirect / http://mydomain.com:8080/
</VirtualHost>
関連するApacheドキュメント:
関連質問: ホスト名に基づくApacheリダイレクト
(注:この回答の元のバージョンでは、RedirectMatchの使用が誤って示唆されていました。@ ChrisSが指摘したように、URLのドメイン部分を解析できません。)
端末で次の行を実行します(ドメインとサブドメイン名を正しく指定してください)
Sudo nano /etc/Apache2/sites-available/subdomain.example.com.conf
次のコードを貼り付け、必要に応じて変更します
<VirtualHost *:80>
ServerAdmin [email protected]
ServerName subdomain.example.com
ServerAlias subdomain.example.com
ProxyRequests Off
#ProxyPass / http://localhost:8080/
<Location />
ProxyPreserveHost On
ProxyPass http://example.com:8080/
ProxyPassReverse http://example.com:8080/
</Location>
# Uncomment the line below if your site uses SSL.
#SSLProxyEngine On
</VirtualHost>
端末で次の行を実行します(ドメインとサブドメイン名を正しく指定してください)
Sudo a2enmod proxy
Sudo a2enmod proxy_http
Sudo a2ensite subdomain.example.com.conf
Sudo service Apache2 restart
メインのvhost構成に次の行を追加します。
ProxyPreserveHost On
ProxyPass / http://example.com:8080/
ProxyPassReverse / http://example:8080/
これにはApacheでmod_proxyが必要であることに注意してください。
あなたはmod_rewriteを探しています。 これはApacheのドキュメントへのリンクですbasic および advanced 構成の多くの例が含まれています。
また、ドキュメントを自分で解釈できない場合は、httpd.confに追加してみてください。
RewriteEngine on
RewriteCond %{HTTP_Host} ^dev\.example\.com$ [NC]
RewriteRule ^(.*)$ http://example.com:8080$1 [R=301]
そして、それが明確な例でない場合は、ここに mod_rewrite初心者ガイドへのリンク もあります。