我使用以下配置来使用 vhost_alias_module 更轻松地管理我的托管设置。我希望网站的结构类似于以下 /sites/domain.com/w/w/w/,使用以下配置可以正常工作。但是,如果我尝试访问 domain.com 而不是 www.domain.com,就会崩溃。我该如何解决这个问题?
更新:我希望 domain.com 的请求自动定向到 www.domain.com。如果这需要 403 重定向就好了(我认为从 SEO 角度来看这是更好的选择)。
LoadModule vhost_alias_module /usr/lib/apache2/modules/mod_vhost_alias.so
<VirtualHost *:80>
ServerAdmin [email protected]
DocumentRoot /sites/
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory /sites/>;
Options Indexes FollowSymLinks MultiViews ExecCGI
AllowOverride All
Order allow,deny
allow from all
</Directory>
UseCanonicalName Off
VirtualDocumentRoot /sites/%2+/%1.1/%1.2/%1.3+
</VirtualHost>
答案1
好吧,暗示的要求www
几乎让你无法使用 mod_vhost_alias,而进入 mod_rewrite 领域。但我能想到几个选择:
只需重定向至
www
。RewriteEngine on # Match anything with a two-part name # (will not work for 3-part base domains that would need to redirect to www, be careful) RewriteCond %{HTTP_HOST} ^([^\.]+\.[^\.]+)$ # Redirect RewriteRule ^/(.*)$ http://www.%{HTTP_HOST}/$1 [R=301]
让这些请求无需重定向即可工作,并使用符号链接技巧将它们粘贴到 www 位置。
根据你们的
VirtualDocumentRoot
要求,让我们domain.com
来改变这一点:/sites/com/d/o/m
VirtualDocumentRoot /sites/%-2+/%-3.1/%-3.2/%-3.3+
domain.com
这将发出转到的请求/sites/domain.com/_/_/_
- 将此位置设为到的符号链接/sites/domain.com/w/w/w
。