2

简而言之

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

详细地

我在 linux/apache2 上运行的站点存在问题,其中“www.” 网址工作正常,但使用“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.”。要加前缀。

这是正在使用的 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 条目,所有这些都无效。

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

4

2 回答 2

0
Options -Indexes
Options +FollowSymLinks
RewriteEngine on
RewriteCond %{HTTP_HOST} ^example.com [NC]
RewriteRule ^(.*)$ http://www.example.com/$1 [R=301,L]
于 2015-09-19T19:10:30.397 回答
0

今天我注意到,从之前的测试服务器实例中,在/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。然后请求被路由到正确的 Web 根目录,就像使用 www. 请求,问题已解决。

但是,我不清楚为什么选择这个example.co.uk.conf来请求exampledomain.co.uk而不是那些www.exampledomain.co.uk,所以如果有人可以扩展这个答案,请编辑或评论. 谢谢!

于 2015-09-21T10:26:24.770 回答