【问题标题】:301 Redirect not working on new server301 重定向在新服务器上不起作用
【发布时间】:2017-09-28 13:31:32
【问题描述】:

我们在 Linux 上运行 Apache 服务器。

在 Apache Config 文件的<VirtualHost> 中(/etc/apach2/sites/site.conf 中),我们有以下重写规则:

此规则的目的是,如果任何人访问该站点(可以通过多个域访问)尝试在前面没有www.的情况下访问,它将301重定向到www.。例如,如果用户访问站点http://example.com,则规则将301 重定向到http://www.example.com

RewriteEngine on

RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteCond %{HTTP_HOST} ^([a-z.]+)$ [NC]
RewriteRule ^(.*)$ http://www.%1/$1 [R=301,L]

我们在其他服务器上设置了相同的规则并且工作正常,但由于某种原因,我们无法让它在这个新服务器上工作。重启 Apache 就好了等等。但是当我们使用example.com 访问该站点时,它不会重定向到www.example.com

有什么建议或以前的经验可以提供一些线索吗?

=========

这是上下文配置的扩展版本。

<Directory />
                Options FollowSymLinks
                AllowOverride None
        </Directory>
        <Directory /var/www/site/>
                Options Indexes FollowSymLinks MultiViews
                AllowOverride None
                Order allow,deny
                allow from all

                RewriteEngine on

                # force www
                RewriteCond %{HTTP_HOST} !^www\. [NC]
                RewriteCond %{HTTP_HOST} ^([a-z.]+)$ [NC]
                RewriteRule ^(.*)$ http://www.%1/$1 [R=301,L]

                # Bypass images, css, javascript and docs, add your own extensions if needed.
                RewriteCond %{REQUEST_URI} \.(bmp|gif|jpe?g|png|css|js|txt|pdf|doc|xls|ico)$
                RewriteRule ^(.*)$ - [NC,L]

                # The ColdBox index.cfm/{path_info} rules.
                RewriteRule ^$ index.cfm [QSA,NS]
                RewriteCond %{REQUEST_FILENAME} !-f
                RewriteCond %{REQUEST_FILENAME} !-d
                RewriteRule ^(.*)$ index.cfm/%{REQUEST_URI} [QSA,L,NS]

        </Directory>

【问题讨论】:

  • 是否启用了 mod_rewrite?只是为了澄清一下,这个指令是否直接在服务器配置(或虚拟主机上下文)中 - 您似乎暗示了这一点?如果是,那么这个指令就不是严格正确的。
  • 嗨 w3dk,是的,mod_rewrite 已启用(定义的其他重写工作正常)。该指令位于虚拟主机 > 目录上下文中。 ...
  • 其他重写(正在工作)是否在同一目录上下文中? FollowSymLinks 必须在目录上下文中设置。您的正则表达式不包括连字符,所以大概您的域名不包含连字符?什么版本的阿帕奇?您是否启用了调试?检查HTTP_HOST 的值(例如,分配给环境变量并签入您的代码)。
  • 谢谢!我已经在那里粘贴了完整的上下文。FollowSymlinks 在那里,但是在一个单独的目录容器中。不确定这是否会有所作为。我已经用完整的上下文更新了原始帖子。 Apache 是版本 2.4.7 (Ubuntu).. 不确定如何启用调试.. 将对此进行调查.. 再次感谢!!
  • 我已经按照你的建议添加了 RewriteRule .. 这似乎重写得很好。 119.9.30.242/foo 改写为“119.9.30.242/bar?host=119.9.30.242”.. 这个改写就在 www 改写的正下方.. 谢谢!!

标签: apache mod-rewrite http-status-code-301


【解决方案1】:

评论:我已经按照你的建议添加了 RewriteRule.. 这似乎可以重写。 119.9.30.242/foo 重写为http://119.9.30.242/bar?host=119.9.30.242

但是在你所说的问题中:

...但是当我们使用example.com 访问该站点时,它不会重定向到www.example.com

您似乎是通过 IP 地址而不是域名访问该站点?!

如果您通过 IP 地址(不是域名)访问该站点,那么这显然不会重定向,因为前面的 RewriteCond 指令验证了主机名:

RewriteCond %{HTTP_HOST} ^([a-z.]+)$ [NC]

这仅允许由字母和点组成的主机名,没有数字或连字符(正如我在之前的评论中提到的),因此这将排除 IP 地址被重定向。 (没错,http://www.119.9.30.242/ 是无效的。)

更新:要允许/重定向带有数字(和连字符)的域,您需要将上述指令/正则表达式更改为:

RewriteCond %{HTTP_HOST} ^([a-z0-9.-]+)$ [NC]

【讨论】:

  • 感谢 w3dk .. 这只是一个例子.. 如果通过域访问该站点也有同样的问题。这是一个未重定向的域:sample.membes3.com.au。有趣的是,既然你提到了它,sample.membes3.com.au/?foo 不会重定向到 bar..
  • sample.membes3.com.au - 包含一个数字 (3),因此不会被重定向。如上所述,您的正则表达式不包括数字。 http://sample.membes3.com.au/?foo 也不会重定向,它应该是http://sample.membes3.com.au/foo(不是?)。
  • 点对点.. 问题是域中的数值!谢谢 w3dk!
猜你喜欢
  • 2019-12-15
  • 1970-01-01
  • 2016-01-28
  • 1970-01-01
  • 1970-01-01
  • 2018-02-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多