非www。域不重定向到 www.领域

non-www. domain not redirecting to www. domain

简而言之

工作正常: www.exampledomain.co.uk{/with-any-url}
给出 404 错误: exampledomain.co.uk{/with-any-url}

详细

我在 linux/apache2 上的站点 运行 遇到问题,其中 'www.' url 工作正常,但是 'www.' 删除了一个每 url 返回 404。该域在 dnsstuff.com 检查中没有显示错误,www 和常规域指向相同的 IP 地址。

当我使用 cmd ping 域和 www.域,都解析到相同的 IP 并响应。

我在 Web 根目录中的 .htaccess 文件中实现了此代码,该文件用于将 'www.' 添加到非 www 请求之前:

Options +FollowSymlinks
Options All -Indexes
RewriteEngine on
RewriteBase /

RewriteCond %{HTTP_HOST} !^$
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteCond %{HTTPS}s ^on(s)|
RewriteRule ^http%1://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

但是,这也不起作用。确切的重写规则已经过测试并在另一个站点上运行以强制 'www.' 被添加前缀。

这是正在使用的虚拟主机配置文件:

<VirtualHost *:80>
  ServerAdmin exampleuser@exampledomain.co.uk
  ServerName  www.exampledomain.co.uk
  ServerAlias exampledomain.co.uk

  DirectoryIndex index.php index.html
  DocumentRoot /home/exampleuser/public/example.co.uk/public_html
     <Directory /home/exampleuser/public/example.co.uk/public_html>
                Options Indexes FollowSymLinks MultiViews
                AllowOverride All
                Order allow,deny
                allow from all
    </Directory>

  LogLevel warn
  ErrorLog  /home/exampleuser/public/example.co.uk/log/error.log
  CustomLog /home/exampleuser/public/example.co.uk/log/access.log combined
</VirtualHost>

<VirtualHost *:80>
    ServerName exampledomain.co.uk
    Redirect permanent / http://www.exampledomain.co.uk/
</VirtualHost>

服务器名称和别名的定义顺序与此处显示的顺序相反(apache 在更改之间重新启动)并且稍后添加了 'Redirect permanent' 的第二个 vhosts 条目,全部为无效果。

是什么导致了这种行为?还有什么我应该检查的吗?搜索了这么多 material 以找到解决方案,但看不出有任何错误或遗漏。任何帮助将不胜感激!

Options -Indexes
Options +FollowSymLinks
RewriteEngine on
RewriteCond %{HTTP_HOST} ^example.com [NC]
RewriteRule ^(.*)$ http://www.example.com/ [R=301,L]

今天我注意到,在之前的测试服务器实例中,/etc/apache2/sites-enabled/ 中还有另一个 vhosts conf 文件,它被遗留下来并命名为 example.co.uk.conf - 主 exampledomain.co.uk.conf 文件指向的站点使用的目录名称是 /home/exampleuser/public /example.co.uk/public_html 所以我检查了里面,文件包含一个空的 vhosts 声明:

<VirtualHost *:80>
</VirtualHost>

当这个 <VirtualHost> 部分被散列注释掉或被删除,或者 conf 文件被重命名为 example.co.uk.conf 以外的其他内容时,非万维网。然后请求被路由到正确的网络根目录,就像 www.请求,问题已解决。

但是,我不清楚为什么选择这个 example.co.uk.conf 来请求 exampledomain.co.uk 和不适用于 www.exampledomain.co.uk 的人,因此如果有人可以扩展此答案,请编辑或发表评论。谢谢!