301重定向不在新服务器

时间:2017-05-01 03:37:13

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

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

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

此规则的目的是,如果有人访问该网站(可以通过多个域访问),则尝试在前面没有www.的情况下进行访问,它将301重定向到www.。例如,如果用户访问网站http://example.com,则规则将重定向到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

任何可能提供线索的建议或以前的经验?

======

以下是Config for context的扩展版本。

<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>

1 个答案:

答案 0 :(得分: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]