如何从 Grails 应用程序的 URL 中删除应用程序名称?

Posted

技术标签:

【中文标题】如何从 Grails 应用程序的 URL 中删除应用程序名称?【英文标题】:How can I remove the application name from a Grails application’s URL? 【发布时间】:2012-12-24 19:02:51 【问题描述】:

我有一个应用程序在这样的 URL 上运行:

http://myapp.mydomain.com/myapp

我不希望 URL 中包含 /myapp 部分。那么我怎样才能摆脱应用程序名称呢?我只想

http://myapp.mydomain.com

成为 URL。我该怎么做?

【问题讨论】:

【参考方案1】:

位详细方法

第一种方法:

首先关闭你的 tomcat [从 bin 目录 (sh shutdown.sh)] 然后你 必须删除您的 tomcat webapps 文件夹 (rm -fr *) 的所有内容然后 将您的 WAR 文件重命名为 ROOT.war 最后启动您的 tomcat [来自 bin 目录 (sh startup.sh)]

第二种方法:

将您的战争文件保留在 CATALINA_BASE/webapps 中,使用其原始名称 - 关闭 在 server.xml 文件的 Host 元素中进行 autoDeploy 和 deployOnStartup。 在 server.xml 中显式定义所有应用程序上下文,同时指定两个路径 和文档库。您必须这样做,因为您已禁用所有 Tomcat 自动部署机制,Tomcat 将不再部署您的应用程序 除非它在 ​​server.xml 中找到它们的 Context。

注意:

最后一种方法也意味着为了对任何 应用程序,您将不得不停止并重新启动 Tomcat。

第三种方法:

将你的war文件放在CATALINA_BASE/webapps之外(它必须在外面 以防止双重部署)。 - 在CATALINA_BASE/conf// 中放置一个名为ROOT.xml 的上下文文件。此上下文文件中的单个元素必须具有 docBase 属性指向你的war 文件的位置。路径元素 不应设置 - 它源自 .xml 文件的名称,在此 案例ROOT.xml。有关详细信息,请参阅上面的上下文容器。

【讨论】:

方法 3:ROOT.xml 需要进入CATALINA_BASE/conf/Catalina/localhost(技术上它是conf/<Engine name>/<Host name>,但Catalinalocalhost 是开箱即用的默认值@ 987654336@) 不直接在conf 我尝试了第一种方法,大多数时候“myapp.mydomain.com”给我错误的请求错误,如果我通过 IP 访问应用程序,它工作正常。有什么解决方案。我正在使用 tomcat 6。【参考方案2】:

1) 您的应用服务器需要配置为将您的 grails 应用程序作为 ROOT 应用程序

2) 您的 grails 应用程序上下文路径应为“/”或 app.context=/

【讨论】:

你的环境是什么? 我的环境是生产环境,它不工作,我使用“grails prod war”创建了war文件。 如何做第一个“应用服务器需要配置为让你的grails应用程序作为ROOT应用程序”。我已经完成了第二个 具体来说,您将应用部署到哪个应用服务器?还是像 GAE 一样云部署?? 其tomcat6服务器部署在云端【参考方案3】:

您可以通过简单地将 Tomcat 命名为ROOT.war 来让 Tomcat 将 webapp 作为根上下文提供服务,即将 Grails 生成的 myapp-0.1.war 复制到 TOMCAT_DIR/webapps/ROOT.war

如果您在Config.groovy 中有grails.serverURL 的设置,则需要为您的生产环境覆盖此设置,以确保Grails 生成的任何绝对链接都是正确的

environments 
  production 
    grails.serverURL = 'http://myapp.mydomain.com'
  

但在 Grails 2 中,完全省略 grails.serverURL 并让应用程序在运行时推断出正确的值通常是安全的。仅当您在未通过正确的 Host 标头的反向代理后面运行时才需要它。

【讨论】:

以上是关于如何从 Grails 应用程序的 URL 中删除应用程序名称?的主要内容,如果未能解决你的问题,请参考以下文章

Grails - 如何从 WAR 中删除 log4j

如何从另一个 grails 插件配置 grails 插件

在 Grails 中获取当前页面的 URL

如何在 grails 应用程序中使用 API

Grails + RESTful URL 映射 + 过滤器 + 路由

Grails、Spring Security 和 Angular JS - 如何保护 URL?