我在 Linux EC2 实例上运行 apache 网络服务器。
问题是,您可以使用 IP 地址、DNS 和域名访问服务器。这会给 SEO 带来问题,我想解决它。
我在 apache 文档中读到,你可以执行 mod_rewrite,如果你有 root 访问权限,则需要在 httpd.conf 中执行此操作,否则需要在 .htaccess 中执行每个目录覆盖。我有 root 访问权限,因此我尝试更改 httpd.conf
如果用户输入 http://52.17.12.123/ 或者 http://ec2-52.17.12.123.eu-west-1.compute.amazonaws.com/
我希望他们被重定向到 www.example.com
这是我尝试过的
<VirtualHost *:80>
DocumentRoot "/var/www/html/my-website"
# Other directives here
RewriteEngine On
RewriteCond %{HTTP_HOST} !^52.17.12.123.com$
RewriteRule /* http://www.example.com/ [R]
</VirtualHost>
它似乎部分起作用了,但是 www.example.com 由于太多重定向而无法加载。
答案1
RewriteCond %{HTTP_HOST} !^52.17.12.123.com$
意味着RewriteRule
只要主机名不是 ,就会应用52.17.12.123.com
。
但是,您的目标是当主机不是您自己的主机名时进行重定向。因此,您需要使用此配置进行重写:
RewriteEngine On
RewriteCond %{HTTP_HOST} !^www.example.com$
RewriteRule ^ http://www.example.com/ [R=301]
这应该可以实现您的目标,并防止重写查找www.example.com
。
我还添加了=301
重写规则,以便 Apache 将向浏览器发送301 Moved Permanently
重定向而不是302
状态代码,这是执行 SEO 重定向的推荐方式。
答案2
我会尝试这样的事情:
RewriteEngine On
RewriteCond %{HTTP_HOST} ^52\.17\.12\.123$ [OR]
RewriteCond %{HTTP_HOST} ^ec2-52\.17\.12\.123\.eu-west-1\.compute\.amazonaws\.com$
RewriteRule (.*) http://www.example.com/$1 [R=301,L]