.htaccess 具有通配符映射的虚拟子域。htaccess
我正在建立一个下载站点,用户将能够注册,并在我的服务器上创建一个带有用户名的文件夹,类似于:.htaccess 具有通配符映射的虚拟子域。htaccess,.htaccess,virtual,.htaccess,Virtual,我正在建立一个下载站点,用户将能够注册,并在我的服务器上创建一个带有用户名的文件夹,类似于:home/users/username 我想完成的是,如果有人在浏览器中键入:username.domain.com,它会将他们路由到:home/users/username/,如果他们键入:username.domain.com/file.mp3,它会将他们路由到:home/users/username/file.mp3 如果它有可能完成子文件夹路由,这将是伟大的充分以及,例如home/users/us
home/users/username
我想完成的是,如果有人在浏览器中键入:username.domain.com
,它会将他们路由到:home/users/username/
,如果他们键入:username.domain.com/file.mp3
,它会将他们路由到:home/users/username/file.mp3
如果它有可能完成子文件夹路由,这将是伟大的充分以及,例如home/users/username/sub/file.mp3
谢谢大家尝试将以下内容添加到站点根目录中的
.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]
我尝试了乌尔里希·帕哈推荐的方法,但没有成功。我希望这能帮助像我这样的家伙,因为乌尔里奇的答案不起作用
# 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]
#将username.domain.com/重写为domain.com/home/username/
#
#仅当尚未重写到/home时才重写/
1美元!家/
#如果子域为www,则跳过重写
重写cond%{HTTP_HOST}^www\。[北卡罗来纳州]
#将(必需的)子域提取到%1
重写cond%{HTTP\u HOST}^([^.]+)\.domain\.com$
#重写到/home/username/URL路径
重写规则(.*)/home/%1/$1[L]
我有一个问题,每当我键入:test.domain.com/folder而不带尾随斜杠时,它会在url:test.domain.com/home/users中显示文件夹的实际路径/test@user1209681尝试在重新编写引擎之前添加directorysash Off
,但请参见“注意事项”完美无瑕@Ulrich Palha谢谢。还有一个问题,有没有其他方法可以不用.htaccess来实现这一点?最初,在高流量情况下,哪种方法将获得最佳性能。@user1209681您也可以在虚拟主机中执行此操作(如果您有权访问它)。语法略有不同,性能差异更好,但可能难以察觉