使用ProxyHTMLURLMap重定向css和js請求

使用ProxyHTMLURLMap重定向css和js請求

我已經在 Ubuntu 16.04 上安裝了 apache 2.4.19 並與 Tomcat 一起使用。我正在嘗試添加一個節點應用程式並將 /node 的所有請求重定向到http://本地主機:3000使用 ProxyPass。當然,我的節點應用程式正在偵聽連接埠 3000。

它可以很好地重定向我的請求,例如https://myapi.com/node/foo

但是我對生成的文檔有疑問阿皮多克我在我的節點應用程式中使用app.use(express.static('doc'));.當我去https://myapi.com/node,似乎所有像/vendor/xxx,這樣的網址/locales/xxx都沒有添加/node前綴。我以為 ProxyHTMLURLMap 會解決這個問題,但我一定是用錯了。

這是我的 /etc/apache2/sites-enabled/000-default.conf (我刪除了一些註解以使其更短)

<VirtualHost *:443>
    ServerAdmin webmaster@localhost
    DocumentRoot /var/www/html

    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined

    # Tomcat
    JkMount /* worker1

    # SSL Config
    SSLEngine on
    SSLCertificateFile /path/to/certificate
    SSLCertificateKeyFile /path/to/private.key
    SSLCACertificateFile /path/to/intermediate-cert

    # Headers
    Header always set Access-Control-Allow-Origin "*"
    Header always set Access-Control-Allow-Headers "X-Requested-With, Content-Type, Origin, Authorization, Accept, Client-Security-Token, Accept-Encoding"
    Header always set Access-Control-Allow-Methods "POST, GET, OPTIONS, DELETE, PULL"
    # Return 200 for all OPTIONS requests
    RewriteEngine On
    RewriteCond %{REQUEST_METHOD} OPTIONS
    RewriteRule ^(.*)$ $1 [R=200,L]

    # Reverse Proxy to Node
    # The part below was supposed to change the relative url to /node/xxx but it does not seem to work
    ProxyHTMLURLMap http://localhost:3000 /node
    <Location /node>
           ProxyPass http://localhost:3000
           ProxyPassReverse http://localhost:3000
           ProxyHTMLEnable On
           SetOutputFilter proxy-html
           ProxyHTMLURLMap http://localhost:3000
    </Location>
</VirtualHost>
<VirtualHost *:80>
    ServerName myapi.com
    Redirect / https://myapi.com/
</VirtualHost>

編輯
我不能ProxyHTMLExtended On按照 Andrew Schulman 的建議使用,因為它會弄亂 apidoc.js 的輸出用 apidoc.js
產生index.html的最後有這樣的語句:
<script data-main="main.js" src="vendor/require.min.js"></script>
然後,我嘗試用腳本語句中的main.js一堆require
替換main.js內容 我還注意到,如果我查詢node/main.js
https://myapi/node/index.html直接,所有文件似乎都加載得很好。也許我只需設定 Apache 將 /node 重定向到 /node/index.html

答案1

預設情況下,mod_proxy_html 不會重寫內聯 CSS 和 Javascript 中的連結。要啟用它,您必須設定ProxyHTMLExtended On.請參閱文件

這可能會解決您的問題,但它不會觸及源自其他檔案的 CSS 和 Javascript,而不是內聯包含的 CSS 和 Javascript。如果您也想嘗試修復這些問題,則需要使用另一個模組,例如 mod_sed 或 mod_line_edit。這也可能對你有用,但也可能不可能完全正確,因為在程式碼(即Javascript)中,URL 可以以正規表示式解析器無法找到的任意方式計算。

相關內容