我有一个Rails + Apache + Passenger设置,我的应用程序提供了通配符子域。我需要所有www URL重定向到他们的非www等价物。
我当前的vhost配置如下
<VirtualHost *:80>
ServerName example.net
ServerAlias *.example.net
DocumentRoot /home/public_html/example.net/current/public
RailsEnv staging
</VirtualHost>
我在各个地方尝试了各种各样的重写规则,但都没有生效。我已经检查过以确保启用了apache重写模块并启用了RewriteEngine。不知道我错过了什么。所有人都非常感谢!
答案 0 :(得分:1)
我在我的应用中解决了这个问题,因为无论如何我都有基于域的逻辑。将此代码放在ApplicationController
中class ApplicationController < ActionController::Base
before_filter :check_host
def check_host
if request.host.split('.')[0] == 'www'
redirect_to "http://" + request.host.gsub('www.','')
end
end
end
如果您的某些主机名包含“www”,可能会出现特殊情况。由于您必须编码的任何其他原因。
答案 1 :(得分:0)
您可以在.htaccess文件中使用moderewrite。
RewriteEngine on
RewriteCond %{HTTP_HOST} ^www\.example\.net [NC]
RewriteRule ^(.*)$ http://example.net/$1 [R=301,NC]
RewriteCond %{HTTP_HOST} ^www\.subdomain\.example\.net [NC]
RewriteRule ^(.*)$ http://subdomain.example.net/$1 [R=301,NC]
这应该有效,但我没有测试。
或者这个
RewriteEngine on
RewriteCond %{HTTP_HOST} ^www\.(.*) [NC]
RewriteRule ^(.*)$ http://%1/$1 [R=301,NC,L]