mod_rewrite所有域到一个tld

时间:2014-04-25 19:46:36

标签: apache .htaccess mod-rewrite

我正在寻找一种透明的方式(没有重定向)将所有域重写到同一个域但只有一个域。所以:

random.domain.tld - > random.domain.local

在tld之前存在未知数量的段,tld本身是未知的,并且tld将永远不会有点(如co.uk)所以它应该只是最后一次之前的所有内容以及之后的所有内容最后一点。

我已经在这一段时间内修好了一段时间没有运气:

RewriteRule ^([^.]+)\.([^\.]*?)$ $1.local [L]

1 个答案:

答案 0 :(得分:2)

你不能用一个简单的RewriteRule来做到这一点,因为它只适用于url的路径。相反,您需要RewriteCond来获得额外的参考:

RewriteEngine on
RewriteCond %{HTTP_HOST} !\.local$
RewriteCond %{HTTP_HOST} ^(.+)\.[^.]+$
RewriteRule ^(.*)$ http://%1.local$1 [P,QSA]

此类重写规则的一般提示:如果您可以访问http服务器配置,那么您应该始终更喜欢将此类规则放入主机配置部分。 .htaccess样式文件非常容易出错,它们会使事情变得复杂,难以调试并使服务器速度变慢。如果您可以访问http服务器配置,它们只是一种替代方案。

但是,如果目标只是暂时采用"重定向"为了测试目的,通常更简单和更优雅的方法是使本地DNS条目覆盖要测试的域的真实地址。