eXist-db中的URL重写问题 - DNS A记录 - Jetty服务器

时间:2018-02-13 10:37:06

标签: xml url-rewriting dns jetty exist-db

我有一个DNS A记录,我希望我的应用程序转发到。我添加到$EXIST_HOME/webapp/WEB-INF/controller-config.xml这一行:

<root server-name="something.mydomain.com" pattern=".*" path="xmldb:exist:///db/apps/myapp"/>

这就是我在controller.xql中关于app-root的内容:

else if (contains($exist:path,"app-root")) then
<dispatch xmlns="http://exist.sourceforge.net/NS/exist">
    <forward url="{$exist:controller}/{substring-after($exist:path, '$app-root/')}">
        <set-header name='Cache-Control' value="no"/>
    </forward>
</dispatch>

现在,当我将浏览器指向something.mydomain.com时,我正确地看到了db / apps / myapp内容(仍在研究如何让index.html中的index.html启动,但这是次要问题)。 something.mydomain.com/index.html转换为&#39; http://something.mydomain.com/exist/index.html&#39;我看到了这个页面。然而,我已经丢失了所有链接到图像,CSS样式等等。经过检查,我看到,例如,$ app-root无法解压缩(例如,我的横幅保留了地址&#39; $ app-root / resources / img / banner.jpg&#39;在我浏览器页面的HTML源代码中)。我已将其更改为/resources/img/banner.jpgresources/img/banner.jpg等,但我没有运气。毋庸置疑,在改变$EXIST_HOME/webapp/WEB-INF/controller-config.xml之前,一切正常。我错过了什么?

其他相关问题:

我未按照 eXist:NoSQL文档数据库和应用程序平台一书中的说明在<Set name="contextPath">/exist</Set>中找到$EXIST_HOME/tools/jetty/etc/jetty.xml。我可以找到它,以便我可以删除“存在”。 URL的位?

1 个答案:

答案 0 :(得分:0)

好的,这部分是由于我对这个主题的无知以及我想要服务的一些文件的配置。因为我有

<root server-name="something.mydomain.com" pattern=".*" path="xmldb:exist:///db/apps/myapp/subfolder"/>

在我的$EXIST_HOME/webapp/WEB-INF/controller-config.xml中,eXist-db正在/ subfolder文件夹中查找控制器。模块和配置文件(包括他的controller.xql)都在myapp文件夹中,因此eXist-db正在使用该控制器(对控制器的请求回落到myapp文件夹,因为子文件夹中没有控制器)。一旦我将控制器放在子文件夹中,我就编辑了这个:

else if (ends-with($exist:resource, ".html")) then
    (: the html page is run through view.xql to expand templates :)
    <dispatch xmlns="http://exist.sourceforge.net/NS/exist">
        <view>
            <forward url="../modules/view.xql"/>
        </view>
        <error-handler>
            <forward url="../error-page.html" method="get"/>
            <forward url="./modules/view.xql"/>
        </error-handler>
    </dispatch>

这样我仍然可以使用myapp文件夹中的view.xql。

但这只能部分地解决了这个问题,因为现在$ app-root并没有得到解压缩。例如,如果我的css位于myapp / resources / css /中并且从子文件夹目录中的文件引用,则不会加载它。到目前为止,我发现的唯一解决方法是使用完整的http://地址对从子文件夹中的页面引用的每个css,jpg,js等进行硬编码。有没有办法告诉eXist-db在URL重写规则中指定的文件夹中查找一个文件夹?我也尝试过:

else if (contains($exist:path,"app-root")) then
<dispatch xmlns="http://exist.sourceforge.net/NS/exist">
    <forward url="xmldb:exist://db/apps/myapp">
        <set-header name='Cache-Control' value="no"/>
    </forward>
</dispatch>

,在存在之后有两个或三个斜杠:,它没有做到这一点(错误500),也没有forward url="http://fulladdress/db/apps/myapp"

此外,现在

else if ($exist:path eq "/") then
    (: forward root path to index.xql :)
    <dispatch xmlns="http://exist.sourceforge.net/NS/exist">
        <redirect url="index.html"/>
    </dispatch> 
子文件夹/ controller.xql中的

正确地将空$exist:path转发到index.html。

最后,我设法找到了更新版本的eXist-db放置<Set name="contextPath">/exist</Set>代码的位置。它在eXist-db/tools/jetty/webapps/exist-webapp-context.xml