Apache 非www.domain未重定向到www.domain 简而言之
工作正常:www.exampledomain.co.uk{/带有任何url}Apache 非www.domain未重定向到www.domain 简而言之,apache,.htaccess,mod-rewrite,vhosts,mod-vhost-alias,Apache,.htaccess,Mod Rewrite,Vhosts,Mod Vhost Alias,工作正常:www.exampledomain.co.uk{/带有任何url} 给出404错误:exampledomain.co.uk{/with any url} 详细地 我在linux/apache2上运行的一个站点上遇到了一个问题,其中“www.”url工作正常,但删除了“www.”后,每个url都会返回404。域在dnsstuff.com检查中没有显示错误,www和常规域指向相同的IP地址 当我使用cmd ping域和www.domain时,它们都解析为相同的IP并响应 我在web根目录中
给出404错误:exampledomain.co.uk{/with any url} 详细地 我在linux/apache2上运行的一个站点上遇到了一个问题,其中“www.”url工作正常,但删除了“www.”后,每个url都会返回404。域在dnsstuff.com检查中没有显示错误,www和常规域指向相同的IP地址 当我使用cmd ping域和www.domain时,它们都解析为相同的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>
服务器管理员exampleuser@exampledomain.co.uk
服务器名www.exampledomain.co.uk
ServerAlias exampledomain.co.uk
DirectoryIndex.php index.html
DocumentRoot/home/exampleuser/public/example.co.uk/public\u html
选项索引跟随符号链接多视图
允许超越所有
命令允许,拒绝
通融
日志级别警告
ErrorLog/home/exampleuser/public/example.co.uk/log/error.log
CustomLog/home/exampleuser/public/example.co.uk/log/access.log组合
ServerName exampledomain.co.uk
重定向永久/http://www.exampledomain.co.uk/
服务器名称和别名的定义顺序与此处显示的相反(在更改之间apache会重新启动),随后添加了“重定向永久性”的第二个vhosts条目,但均无效
是什么导致了这种行为?还有什么我要查的吗?我已经搜索了这么多资料来找到解决方案,但没有发现任何错误或遗漏。任何帮助都将不胜感激 今天,我注意到,在以前的测试服务器实例中,/etc/apache2/sites enabled/中还有另一个vhosts conf文件,它被遗留下来,名为example.co.uk.conf——主exampledomain.co.uk.conf文件指向的站点的目录名是/home/exampleuser/public/example.co.uk/public\u html,因此我检查了内部,文件包含一个空的vhosts声明:
Options -Indexes
Options +FollowSymLinks
RewriteEngine on
RewriteCond %{HTTP_HOST} ^example.com [NC]
RewriteRule ^(.*)$ http://www.example.com/$1 [R=301,L]
<VirtualHost *:80>
</VirtualHost>
当这个
部分被用散列注释掉或删除,或者conf文件被重命名为example.co.uk.conf以外的文件时,非www.请求被路由到正确的web根目录中,就像www.requests一样,问题得到了解决
但是,我不清楚为什么选择这个example.co.uk.conf来请求exampledomain.co.uk,而不是请求www.exampledomain.co.uk,所以如果有人可以扩展这个答案,请编辑或评论。谢谢 谢谢,尝试了你的重写规则,但没有效果。看起来和我已经拥有的东西一样,虽然不敏感。