我正在使用以下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]