我在 Debian Squeeze 服务器中设置我的 Apache2 虚拟主机,方式如下:
文件名:whatever.mydomain.com
Alias /whatever /var/www/whatever.mydomain.com
<VirtualHost *:80>
ServerAlias whatever.mydomain.com
ServerAdmin [email protected]
VirtualDocumentRoot /var/www/%0
ErrorLog /var/log/apache2/whatever.mydomain.com-error.log
CustomLog /var/log/apache2/whatever.mydomain.com-access.log combined
</VirtualHost>
<Directory /var/www/whatever.mydomain.com>
AuthPAM_Enabled On
AuthType basic
AuthName "Authorization Required to proceed"
AuthBasicAuthoritative off
AuthUserFile /dev/null
Require valid-user
</Directory>
我想为同一个网站提供两个 URL:whatever.mydomain.com 和 www.mydomain.com/whatever
因此,为了解决这个问题,我在文件开头配置了 Alias /whatever /var/www/whatever.mydomain.com。但我不知道这是否是一种好的做法。那么 VirtualHost 设置呢?有什么可以做得更好的吗?
最后一个问题:有没有办法在文件内部使用变量?例如,在 VirtualDocumentRoot 以外的其他地方重复 %0?
提前致谢,
编辑:我遇到了一个新问题。使用全局别名,我的所有虚拟主机都将响应 /whatever 别名,而我只希望在 www.mydomain.com 上应用别名。我目前正在努力使用 RedirectMatch,但没有成功。我使用重定向而不是别名,因为使用别名时,访问和错误日志不会进入虚拟主机日志文件。
答案1
您可能希望将别名放在它自己的虚拟主机中。例如:
<VirtualHost *:80>
ServerName www.mydomain.com
ServerAdmin [email protected]
DocumentRoot /var/www/whatever.mydomain.com
Alias /whatever /var/www/whatever.mydomain.com
ErrorLog /var/log/apache2/www.mydomain.com-error.log
CustomLog /var/log/apache2/www.mydomain.com-access.log combined
</VirtualHost>
这就是我要做的事情,但当然,在 Apache 中有很多方法可以正确完成任务。如果它有效,那就有效......
至于你的最后一个问题:你实际上不能在配置文件中使用变量(除了少数例外),但有些第三方模块可能值得研究。其中一个是 mod_macro:http://people.apache.org/~fabien/mod_macro/ 另一个可用于使配置文件更具动态性的工具是 mod_perl,但这是一个非常高级的主题。