0

そこで、URL をきれいにするための mod_rewrite ルールをいくつか用意しました。

つまり、次のように入力された URL を変更したいということです。

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

test.php などへのバックグラウンド アソシエーションに:

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

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

書き換えログによると、すべての RewriteRule は正常に動作しているように見えますが、400 エラーしか表示されません。


vHost ファイル:

<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>

誰にもアイデアはありますか?


編集: (www.)domain.com は別の方法で処理されるため、リクエストのホスト名 (*.domain.com) はそのままにしておく必要があります。

4

1 に答える 1

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/

于 2012-05-03T14:25:03.297 に答える