htaccess子域重写

时间:2011-03-23 14:47:58

标签: .htaccess

这里有很多关于子域名的主题,但没有人可以帮助我......

我使用htacces将子域设置为文件夹

所以如果我们放http://en.example.com/something

我使用这样的东西..

RewriteCond %{HTTP_HOST}  ^([^.]+)\.example\.com$ 
RewriteRule ^(.*)$        http://example.com/%1/$1 [NC]

这种方法很好但是栏中的地址更改为http://example.com/en/something但我想保留http://en.example.com/something

所以我试过这个

RewriteCond %{HTTP_HOST}  ^([^.]+)\.example\.com$ 
RewriteRule  ^([^.]+)\.example\.com(.*)   /$1/$2

或只是

RewriteCond %{HTTP_HOST}  ^([^.]+)\.example\.com$ 
RewriteRule ^(.*)$        %1/$1 [NC]

但这不起作用。任何解决方案或想法?

一种解决方案是在那里使用语言(http://example.com/en/something),我在那里重写它但是如果我在子目录上工作,我得到类似http://example.com/subdirectory/en/something的东西 - 太糟糕了。 也许我喜欢http://example.com/en/subdirectory/something芽如何继续这个......

而且在一些私人服务器上,首先有一个案例将我发送到“可能”的默认域名,因此它对我不起作用。 (也许这是一些服务器条件或设置)

1 个答案:

答案 0 :(得分:5)

我知道这已经晚了一个月,但也许这对某些人来说仍然有用。这里有一些事情:

关于你的第一个RewriteRule:

RewriteCond %{HTTP_HOST}  ^([^.]+)\.example\.com$ 
RewriteRule ^(.*)$        http://example.com/%1/$1 [NC]

您似乎已经发现,重写到其他网址也会将用户的浏览器重定向到该新网址,即使它位于您自己的域中。要隐藏它,您必须重写到服务器上的文件路径(就像您接下来的两个规则一样)。

关于你的第二个RewriteRule:

RewriteCond %{HTTP_HOST}  ^([^.]+)\.example\.com$ 
RewriteRule  ^([^.]+)\.example\.com(.*)   /$1/$2

问题在于您无法匹配RewriteRule中的域名,只能匹配URL路径。如果您的网址是 www.example.com/something/somethingelse ,那么您尝试匹配的字符串只是某事/某些事情。换句话说,它排除了 www.example.com / ,因此您拥有的此RewriteRule模式将永远不会与域名匹配,因为该模式甚至没有针对URL的该部分进行测试,但是您包含模式中的域名,导致匹配失败。

关于你的第三个RewriteRule:

RewriteCond %{HTTP_HOST}  ^([^.]+)\.example\.com$ 
RewriteRule ^(.*)$        %1/$1 [NC]

这看起来应该可以工作,所以我不能肯定地说明为什么不能更多地了解你的文件在服务器上的组织方式等等。假设您拥有 / home / somebody / public_html / 中的所有网站文件。为了使RewriteRule能够正常工作,您需要在 public_html 中包含 en 子目录。因此,如果有人访问 en.example.com/something ,则RewriteRule会导致Apache在 / home / somebody / public_html / en / something 中提供文件。我猜你为什么不适合你的是你可能有一个子域指向除 public_html 之外的其他地方(假设你实际上有像我的例子那样组织的网站文件)。请记住,您要重写的内容(在这种情况下为/$1/$2)是服务器上的文件路径,而不是您网站的URL。

我希望有所帮助!你现在可能已经解决了这个问题,但即使你有,我希望其他人仍然觉得这很有用。