2012-05-03 28 views
0

したがって、私はURLをよりきれいにするためにいくつかのmod_rewriteルールを持っています。Apache VirtualHost URLの抽象化

http://test.domain.com/test.php?client=test&page=cheese/wine 

PS::などのtest.phpを向けてバックグラウンド協会に

http://test.domain.com/cheese/wine/ 

:私は私のような入力されたURLを変更したいわけ。これにより

クライアント上の変数は実際には[test] .domain.comです。

書き換えログによれば、すべてのRewriteRuleは正常に動作しているように見えますが、私が得るのは400エラーです。


バーチャルホストのファイル:

<VirtualHost *:80> 
    ServerName *.domain.com 
    DocumentRoot /var/www/dir/ 

    ... 

    RewriteEngine on 

    # drop www. from subdomains 
    RewriteCond %{HTTP_HOST} ^www\.(.*)\.domain.com$ 
    RewriteRule ^/?(.*)$ http://%1.domain.com/$1 [R=301] 

    # rewrite x.domain.com/abc to abc?client=x 
    RewriteCond %{HTTP_HOST} ^([^.]+)\.domain.com$ 
    RewriteRule ^/?(.*)$ $1?client=%1 [QSA] 

    RewriteRule ^/?(.*)$ test.php?page=$1 [QSA,L] 

    ... 
</VirtualHost> 

誰がどんな考えを持っていますか?


編集:要求のホスト名(* .domain.com)が(。WWW)domain.comは異なる方法で処理されるため、そのまま滞在する必要があります。

答えて

0

コードで無限ループが生成されます。

<VirtualHost *:80> 
    ServerName *.domain.com 
    DocumentRoot /var/www/dir/ 

    ... 

    RewriteEngine on 

    # drop www. from subdomains 
    # also drop www. from main domain 
    RewriteCond %{HTTP_HOST} ^www\.(.*\.)?domain.com$ 
    RewriteRule ^/?(.*)$ http://%1domain.com/$1 [R=301] 

    # rewrite x.domain.com/abc to abc?client=x 
    RewriteCond %{REQUEST_URI} !^test\.php 
    RewriteCond %{HTTP_HOST} ^([^.]+)\.domain.com$ 
    RewriteRule ^/?(.*)$ test.php?page=$1&client=%1 [QSA,L] 

    ... 
</VirtualHost> 

私もそうwww.domain.com/コードを変更し、私はこれがうまくいく参照domain.com/

+0

にリダイレクトします。しかし、(www。)domain.comと* .domain.comは同じDocumentRootを指してはいけないので、何か別の解決策が必要です。他の仮想ホストは正しく設定され、動作しています。無限ループを回避する他の方法はありますか? – SineCosine

+0

ハァッ?上記のループを防ぐためのソリューションを投稿しました。ドメイン名の場合は、必要に応じて古いRewriteCondをそのまま使用することができます。両方ともあなたの設定で同じことをする必要があります。 – Gerben