htaccess子域重写

Rob*_*sky 4 .htaccess

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

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

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

我用这样的东西..

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

这工作正常,但栏中的地址更改为http://example.com/en/something但我想保持http://en.example.com/something

所以我试过这个

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

要不就

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

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

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

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

Com*_*eek 5

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

关于你的第一个RewriteRule:

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

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

关于你的第二个RewriteRule:

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

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

关于你的第三个RewriteRule:

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

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

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