如何从 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>
,但Catalina
和localhost
是开箱即用的默认值@ 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 中删除应用程序名称?的主要内容,如果未能解决你的问题,请参考以下文章