0

所以我有几个 mod_rewrite 规则来使 URL 更漂亮。

我的意思是我希望更改这样输入的网址:

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

到 test.php 的背景关联,如下所示:

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

PS:上面的client变量其实就是[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 以不同的方式处理。

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