如何使用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错误
答案 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
。
domain.com/home/kaboom.txt
不存在 - 没有任何事情发生。http://home.domain.com/home/kaboom.txt
(完整的URL)。 Apache进入下一次迭代。在那里检查domain.com/home/home/kaboom.txt
是否存在。很可能不会(除非您有与子域同名的子文件夹)并且不再进行重写 - 作业已完成。