非www。域名不重定向到www。域

时间:2015-09-19 16:44:31

标签: apache .htaccess mod-rewrite vhosts mod-vhost-alias

简而言之

工作精细: www.exampledomain.co.uk {/ with-any-url}
GIVES 404错误: exampledomain.co.uk {/ with-any-url}

详细

我遇到了在linux / apache2上运行的网站的问题,其中' www。'网址工作得很好,但是使用了' www。'删除每个网址都会返回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.ch”。作为前缀。

这是正在使用的vhosts conf文件:

<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重新启动中间更改)和第二个vhosts条目,用于&#39; Redirect permanent&#39;之后被添加,一切都没有效果。

可能导致此行为的原因是什么?我还应该检查一下吗?搜索了这么多材料以找到解决方案但却看不到任何错误或遗漏。任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:0)

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

<VirtualHost *:80>
</VirtualHost>

如果此<VirtualHost>部分已注释掉哈希值或已删除,或者conf文件已重命名为 example.co.uk.conf 以外的其他内容,则非www。然后,请求被路由到正确的Web根目录,就像使用www一样。请求和问题得到解决。

但是,我不清楚为什么 example.co.main.uk 被选择用于 exampledomain.co.uk 的请求,而不是那些 > www.exampledomain.co.uk ,如果有人可以扩展此答案,请编辑或评论。谢谢!