apache2 将非 www 指向根目录而不是网站文件夹

apache2 将非 www 指向根目录而不是网站文件夹

我创建了几个不同的 vhost,每个 vhost 在 /var/www/ 中都有自己的文件夹,如下所示

/var/www/example1/
/var/www/example2/

现在,当我输入带有 www 的 url 时,www.example1.com它指向,/var/www/example1/index.html因此工作正常,但是当我输入不带 www 的 url 时,example1.com它指向/var/www/,并且我可以看到所有文件夹,但我没有 index.html /var/www/

我看了这里并在 /var/www/ 中创建 .htaccess:

    RewriteEngine On
    RewriteBase /
    RewriteCond % ^example1.com [NC]
    RewriteRule ^(.*)$ http://www.example1.com/$1 [L,R=301]

但它不起作用。

所有虚拟主机的样子如下:

<VirtualHost *:80>
        ServerAdmin webmaster@localhost
        ServerName *example1*
        ServerAlias *.*example1*
        DocumentRoot /var/www/example1
        <Directory />
                Options FollowSymLinks
                AllowOverride All
        </Directory>
        <Directory /var/www/example1/>
                Options Indexes FollowSymLinks MultiViews
                AllowOverride All
                Order allow,deny
                allow from all
        </Directory>

        ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
        <Directory "/usr/lib/cgi-bin">
                AllowOverride None

我已经清除了浏览器缓存。有办法修复吗?

答案1

服务器名称指令不接受通配符,这就是服务器别名适用于。来自手册

服务器名称 [方案://]完全限定域名[:端口]

所以你应该做类似的事情

ServerName example1.com
ServerAlias *.*example1*.com

答案2

您可以将以下代码放置在 Apache 的 httpd.conf vhost 部分或 .htaccess 文件中。

RewriteEngine on
RewriteCond %{HTTP_HOST} ^domain\.com
RewriteRule ^(.*)$ http://www.domain.com/$1 [R=permanent,L] 

相关内容