Apache,mod_rewrite和symlinks / aliases

我试图强制添加www。 如果访问我的网站。 我已经将以下内容添加到我的网站conf文件中:

<Directory /var/www/main> Options FollowSymlinks RewriteEngine on RewriteCond %{HTTP_HOST} ^example\.com RewriteRule ^(.*)∞ http://www.example.com/$1 [L,R=permanent] </Directory> 

这在访问example.com时效果很好。

但是,如果我做一个符号链接ln -s /path/to/somewhere foo并且我尝试访问example.com/foo,我没有被redirect到www.example.com/foo ,这当然是所期望的,因为/path/to/somewhere不在/var/www/main

对于如何使用符号链接也有任何build议吗?

你正在攻击Apache中的DirectoryLocation指令之间的区别。 根据文档 ,“ Directory适用于文件系统空间,“ Location适用于networking空间。 尝试打破你的configuration块像这样:

 <Directory /var/www/main> Options FollowSymLinks </Directory> <Location /> RewriteEngine on RewriteCond %{HTTP_HOST} ^example\.com RewriteRule ^(.*) http://www.example.com/$1 [L,R=permanent] </Location> 

换句话说,将重写部分拉出到一个Location块中。