3

我想知道如何在 Play framework 2.0.x 中为子域执行永久重定向 301。例如:www.example.com/* 重定向到 example.com/*。以前有人试过吗?

4

2 回答 2

8

Global 对象将允许您拦截请求。出于显而易见的原因,您应该使用 GET 请求(即出于 SEO 目的)执行此操作,但其他请求(如 POST、PUT 等)应该从一开始就在您的视图中正确创建。

另一方面,如果它只是一些用于为生活生产提供常见 HTML 页面的应用程序,请考虑在其前面使用一些 HTTP 服务器——那么你可以通过一些重写规则来解决问题。

import play.GlobalSettings;
import play.mvc.Action;
import play.mvc.Http;
import play.mvc.Result;

import java.lang.reflect.Method;

public class Global extends GlobalSettings {

    @Override
    public Action onRequest(final Http.Request request, Method method) {
        if ("GET".equals(request.method()) && "www.example.com".equals(request.host())) {
            return new Action.Simple() {
                public Result call(Http.Context ctx) throws Throwable {
                    return movedPermanently("http://example.com" + request.path());
                }
            };
        }
        return super.onRequest(request, method);
    }
}
于 2012-11-29T22:06:41.977 回答
5

在 conf/routes 文件中

GET /      controllers.Application.index(path = "")
GET /*path controllers.Application.index(path)

在应用程序/控制器/Application.scala

object Application extends Controller {
  def index(path: String) = Action {
    Redirect("http://example.com/" + path, status = MOVED_PERMANENTLY)
  }
}
于 2012-11-29T20:09:33.987 回答