我们在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>
答案 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]