2011-03-23 115 views
4

在这里是许多主题有关的子域,但没有人可以帮我...htaccess的子域重写

我用htacces设置子域文件夹

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

我使用的东西这样的..

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

这工作得很好,但在ADRESS条改为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芽如何进行此操作...

而且在一些私人服务器上,首先有一种情况会将我发送到“可能”默认域,所以它不适用于我。 (也许这是一些服务器的条件或设置)

回答

5

我知道这是一个月后,但也许这仍然是有用的人。这里有几件事情:

关于你的第一个重写规则:

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

,因为它似乎你已经发现,改写到另一个URL也将在用户的浏览器重定向到新的URL,即使是在自己的域名。为了保持隐藏,你必须重写到服务器上的文件路径(就像你对下两条规则做的一样)。

关于你提到的第二个重写规则:

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

的问题还有就是你不能在重写规则相匹配的域名,只有URL路径。如果您的网址是www.example.com/something/somethingelse,那么您尝试匹配的字符串只是something/somethingelse。换句话说,它不包括www.example.com/,所以您拥有的RewriteRule模式将永远不会匹配域名,因为该模式甚至没有针对URL的该部分进行测试,但您将域名包含在该模式,导致匹配失败。

关于你提到的第三个重写规则:

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。

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