.htaccess for Pan-Domain Pointing Subdirectory

时间:2011-06-26 06:32:02

标签: .htaccess subdomain

如何使用htaccess进行此操作:

 a.domain.com -> domain.com/a
 b.domain.com -> domain.com/b
 .
 .
 .
 z.domain.com -> domain.com/z 

我试试:

RewriteCond %{HTTP_HOST} ^(.*).domain.com$ [NC]

RewriteRule (.*) %1/$1 [L]

但是500错误

2 个答案:

答案 0 :(得分:1)

试试这个:

RewriteEngine on
RewriteCond %{HTTP_HOST} ^(.*)\.domain\.com$ [NC]
RewriteRule ^(.*)$ %1/$1 [L,QSA]

可能出现的问题:

  • 您是否在代码上方设置了RewriteEngine on行?
  • 是否安装/启用了mod_rewrite

答案 1 :(得分:0)

非常类似于:mod_rewrite is ignoring rules in subdirectories

不幸的是,你所获得的规则将不起作用(确切地说:它们确实有效 - URL被重写了......但是在Apache看到[L]标志后它会转到另一个迭代..它会被重写再次......再次 - 进入无限循环,Apache必须在某些时候打破)。

你必须添加一些完全打破迭代的条件。几乎没有可能的方法(取决于你的其他规则,你可以在这里阅读更多 - performance impact of order of rewrite rules when using apache mod_rewrite)。

我已经修改了规则,增加了2个条件,这使得它只能在目的地存在的情况下重写。

RewriteEngine on

RewriteCond %{HTTP_HOST} ^(.*)\.domain\.com$
RewriteCond %{DOCUMENT_ROOT}/%1%{REQUEST_URI} -f [OR]
RewriteCond %{DOCUMENT_ROOT}/%1%{REQUEST_URI} -d
RewriteRule (.*) %1/$1 [L,QSA]

那么......它是如何运作的。我们将使用此网址作为示例:http://home.domain.com/kaboom.txt

  1. 如果文件domain.com/home/kaboom.txt不存在 - 没有任何事情发生。
  2. 如果此类文件存在 - URL会在内部重写为http://home.domain.com/home/kaboom.txt(完整的URL)。 Apache进入下一次迭代。在那里检查domain.com/home/home/kaboom.txt是否存在。很可能不会(除非您有与子域同名的子文件夹)并且不再进行重写 - 作业已完成。