1

私はubuntu10.4でapache2+tomcatを使用しています。私は8080でリッスンしているウェブアプリを持っているTomcatサーバーで実行しています

"http:// internal:8080 / dir / name-privatewebapp /"
"http:// internal:8080 / dir / name-publicwebapp /"

外部向けのApacheサーバーは、ドメインのリクエストをプロキシしています。

「サブドメイン」を「domain.com/subdomain」に再マッピングしたいので、他のリクエストは適切なパス/ウェブアプリにプロキシされます

web.john-doe.domain.com  --->  www.domain.com/web/john-doe 


http://www.john-doe.com  --->   www.domain.com/web/john-doe
http://www.foo-bar.com  --->  www.domain.com/web/foo-bar

mod_rewriteだけで動作させることはできませんでした。mod_proxy、mod_proxy_ajp、mod_rewriteを調べています

サーバーにお願いします

  1. ドメインからサブドメインを取得します
  2. サブドメインがwww、w、またはwwでないことを確認してください
  3. 書き換える前に、ディレクトリが実際に「www.domain.com」に存在するかどうかを確認してください
  4. ディレクトリが存在しない場合は、ワイルドドメインのままになります
  5. 最後に、ディレクトリが存在する場合、実際の書き換え

http://www.askapache.com/htaccess/crazy-advanced-mod_rewrite-tutorial.htmlでいくつかのリンクを確認し、チュートリアルを学習しました。

それは成功していません。

私はこのillumin-it.servehttp.com/wordpress/2012/01/redirecting-to-as-using-apache/をフォローし、少し成功しました。

ただし、すべてのサブドメインの仮想ホストを編集せずに、サーバーでリライトとプロキシをオンザフライで実行したいと思います。

これが私の更新されたvhostファイルです

<VirtualHost *:80>
ServerAdmin webmaster@localhost
ServerName www.domain.com
ServerAlias www.domain.com domain.com *.domain.com
RedirectPermanent / http://www.domain.com
DocumentRoot /var/www
<Directory />
    Options FollowSymLinks
    AllowOverride None
</Directory>
<Directory /var/www/>
    Options Indexes FollowSymLinks MultiViews
    AllowOverride None
    Order allow,deny
    allow from all
<IfModule mod_rewrite.c>    
    Options +FollowSymLinks
    Options +Indexes

    RewriteEngine On
    RewriteBase /

    # Prevent looping this rule
#       RewriteCond %{ENV:REDIRECT_STATUS} !200
#       RewriteCond %{HTTP_HOST} !www.domain.com$ [NC]
#       RewriteCond %{HTTP_HOST} ^(www\.)?([a-z0-9.-]+).domain.com$ [NC]
#       RewriteRule (.*) /%2/$1 [L]

    # change the "." in the path to "/"
#       RewriteRule ^(.*)\.(.*)/(.*)$ /$1/$2/$3 [L]

    #redirect domain.com to www.domain.com
    RewriteCond %{HTTP_HOST} !^domain\.com$ [NC]
    RewriteRule ^ http://www.domain.com%{REQUEST_URI} [R=301,NC]
</IfModule> 
</Directory>

ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
<Directory "/usr/lib/cgi-bin">
    AllowOverride None
    Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
    Order allow,deny
    Allow from all
</Directory>

ErrorLog /var/log/apache2/error.log

# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel warn

CustomLog /var/log/apache2/access.log combined

Alias /doc/ "/usr/share/doc/"
<Directory "/usr/share/doc/">
    Options Indexes MultiViews FollowSymLinks
    AllowOverride None
    Order deny,allow
    Deny from all
    Allow from 127.0.0.0/255.0.0.0 ::1/128
</Directory>
<Proxy *>
Order deny,allow
Allow from all
</Proxy>

#   ErrorLog /var/log/apache2/webapp_error.log
#   LogLevel warn
#   CustomLog /var/log/apache2/webapp_access.log combined

ProxyPass / ajp://localhost:8009/
ProxyPassReverse / ajp://localhost:8009/

#   ProxyPass        /user/ http://localhost:8080/user/privatewebapp/
#   ProxyPassReverse /user/ http://localhost:8080/user/privatewebapp/
#
#   ProxyPass        /publicweb/ http://localhost:8080/dir/publicwebapp/
#   ProxyPassReverse /publicweb/ http://localhost:8080/dir/publicwebapp/
#
#   ProxyPass        / http://localhost:8080/dir/publicwebapp/
#   ProxyPassReverse / http://localhost:8080/dir/publicwebapp/

ServerName www.domain2.com
ProxyRequests Off
ProxyPreserveHost On

RewriteEngine On
RewriteCond %{HTTP_HOST} ^dir/publicwebapp$ [NC]
RewriteRule ^(.*)$ http://www.domain2.com/$1 [R=301,L]
<Location / >
Order deny,allow
Allow from all
RedirectMatch ^/$ /dir/publicwebapp/
ProxyPass ajp://localhost:8009/
ProxyPassReverse ajp://localhost:8009/
</Location>
</VirtualHost>

私も試しました... http://httpd.apache.org/docs/2.0/rewrite/rewrite_guide.html

www.username.host.com/anypathが内部的にwww.host.com/home/username/anypathにマップされると仮定します

サイトのアプリケーションはJavaサーバーで作成されているため、mod_rewriteだけでは機能しないと思います。

仮想ユーザーホスト

RewriteCond   %{HTTP_HOST}                 ^www\.[^.]+\.host\.com$
RewriteRule   ^(.+)                        %{HTTP_HOST}$1          [C]
RewriteRule   ^www\.([^.]+)\.host\.com(.*) /home/$1$2
4

2 に答える 2

0

同様のケースで、私は通常、次のようなものをwebroot(/var/www/.htaccess)の.htaccessに配置します。

<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{HTTP_HOST} subdomain1.domain.com
RewriteCond %{REQUEST_URI} !^/subdomain1
RewriteRule ^(.*)$ one/$1 [L]

RewriteCond %{HTTP_HOST} subdomain2.domain.com
RewriteCond %{REQUEST_URI} !^/subdomain2
RewriteRule ^(.*)$ two/$1 [L]

RewriteRule    ^$ /    [L]
RewriteRule    (.*) /$1 [L]
</IfModule> 

ので、私は持っています

subdomain1.servername.com -> /var/www/subdomain1
subdomain2.servername.com -> /var/www/subdomain2 
servername.com -> /var/www

多分これはあなたを助けますか?

于 2012-09-07T08:06:49.317 に答える
0

最初のルールセット:

#redirect domain.com to www.domain.com
RewriteCond %{HTTP_HOST} !^www\.domain\.com$ [NC]
RewriteRule .+ http://www.domain.com%{REQUEST_URI} [R=301,NC]

空のリクエストがない場合は、所有しているサブドメインに優先します。ルールの2番目のセットはあなたが望むものに近づきます。ただし、ループし、複数のサブドメインエントリをディレクトリパスに変換しないため、この一連のルールを最初に配置してみてください。

# Prevent looping this rule
RewriteCond %{ENV:REDIRECT_STATUS} !200
RewriteCond %{HTTP_HOST} !www.domain.com$ [NC]
RewriteCond %{HTTP_HOST} ^(www\.)?([a-z0-9.-]+).domain.com$ [NC]
RewriteRule (.*) /%2/$1 [L]

# change the "." in the path to "/"
RewriteRule ^(.*)\.(.*)/(.*)$ /$1/$2/$3 [L] 

次に、「www以外からwwwへ」のルールを次のように変更します(上記のルールの後に配置します)。

#redirect domain.com to www.domain.com
RewriteCond %{HTTP_HOST} !^domain\.com$ [NC]
RewriteRule ^ http://www.domain.com%{REQUEST_URI} [R=301,NC]
于 2012-09-07T14:24:03.730 に答える