htaccess mod_rewrite子目录到子域

我正在使用以下RewriteRule将通配符子域redirect到/ users子目录中的相应文件夹:

RewriteCond %{REQUEST_URI} !^/users/ [NC] RewriteCond %{HTTP_HOST} ^(.+)\.domain\.com$ [NC] RewriteCond %1 !=www [NC] RewriteRule ^(.*)$ /users/%1/$1/? [L] 

我想通过301redirect到子域版本来阻止直接访问用户的文件夹,如下所示:

 www.domain.com/users/username/sub1/sub2/ => username.domain.com/sub1/sub2/ 

任何帮助将不胜感激!

既然你停止了RewriteRule如果有一个/users/作为主要path,那么username.domain.com/users/username/sub1/sub2/也会把它们放在那里 – 可能不是预期的。

考虑将每个用户子域的现有configuration更改为通配虚拟主机中的VirtualDocumentRoot ,而不是在那里,以减less复杂性并减less每个请求所需的正则expression式评估次数。

 <VirtualHost *:80> ServerName usernames.domain.com ServerAlias *.domain.com VirtualDocumentRoot /dir/to/users/%1 </VirtualHost> 

然后,为了防止通过正常的主机名访问/users/目录结构,只需将其应用于主站点的configuration:

 RewriteRule ^/users/.*$ - [F] 

如果您打算使用mod_rewrite保留您现有的子域名处理,那么您需要展开以过滤主机名:

 RewriteCond %{HTTP_HOST} ^www\.domain\.com$ [NC,OR] RewriteCond %{HTTP_HOST} ^domain\.com$ [NC] # I'm assuming? RewriteRule ^/users/.*$ - [F]