2012-02-14 90 views
2

我建立一个下载网站,一个用户将能够进行注册和他们的用户名的文件夹将我的服务器上创建,是这样的:home/users/username用通配符映射的.htaccess虚拟子域

我要完成什么是,如果有人类型:username.domain.com在他们的浏览器,它会路由至:home/users/username/,如果他们键入:username.domain.com/file.mp3,它将路由至:home/users/username/file.mp3

如果其能够实现的子文件夹的路由,那将是巨大的完整的例子; home/users/username/sub/file.mp3

谢谢你们

回答

2

尝试添加下列到.htaccess文件在您的网站的根目录。

这将重写任何请求到username.domain.com到正确的文件夹/子文件夹和文件。

我假设home是您网站的根文件夹中的一个目录。

RewriteEngine on 
RewriteBase/

#if request for usename.domain.com/anything 
RewriteCond %{HTTP_HOST} ^([^.]+)\.domain\.com$ [NC] 
#send any request that is not already for home/users to home/users/username/anything 
RewriteRule ^(?!home/users/) home/users/%1%{REQUEST_URI} [L,NC] 
+0

我有一个问题,每当我键入:test.domain.com/folder没有结尾的斜杠,它显示了该文件夹在url中的真实路径:test.domain.com/home/users/test – 2012-02-23 04:14:39

+0

@ user1209681尝试在RewriteEngine On之前添加'DirectorySlash Off',但请参阅注意事项http://stackoverflow.com/questions/3258879/apache-directoryslash-off-site-breaks – 2012-02-23 15:29:58

+0

完美工作@Ulrich Palha谢谢。还有一个问题,有没有其他方法可以在不使用.htaccess的情况下做到这一点?最初,在高流量下,哪种方式最好,性能最好。 – 2012-02-23 17:37:25

0

我尝试了Ulrich Palha的建议,但没有运气。我希望这能帮助像我这样的人,乌尔里希的回答不起作用。

# Rewrite username.domain.com/<path> to domain.com/home/username/<path> 
# 
# Rewrite only if not already rewritten to /home/ 
RewriteCond $1 !home/ 
# Skip rewrite if subdomain is www 
RewriteCond %{HTTP_HOST} !^www\. [NC] 
# Extract (required) subdomain to %1 
RewriteCond %{HTTP_HOST} ^([^.]+)\.domain\.com$ 
# Rewrite to /home/username/URL-path 
RewriteRule (.*) /home/%1/$1 [L]