我有一个VB.NET MVC 4应用程序,它可以在本地和服务器上正常运行。但是我们使用Apache反向代理来提供对所有应用程序的访问,并且当为此实现时,将删除通过AjaxOptions生成的表单属性。
在这个例子中:
<% Using (Ajax.BeginForm("getAdminSearchResults", "InitiationSearchResults", New AjaxOptions With {.HttpMethod = "post", .OnSuccess = "updatePlaceholder", .UpdateTargetId = "lstSearchResults"}, New With {.id = "frmSearch"}))%>
没有反向代理,生成的HTML是:
<form action="/InitiationSearchResults/getAdminSearchResults?Length=23" data-ajax="true" data-ajax-method="post" data-ajax-mode="replace" data-ajax-success="updatePlaceholder" data-ajax-update="#lstSearchResults" id="frmSearch" method="post">
但是使用反向代理:
<form action="/InitiationSearchResults/getAdminSearchResults?Length=23" id="frmSearch" method="post">
这当然会导致视图将数据返回到整页而不是目标div。即使表单标记在视图上是硬编码的,反向代理也会最终删除data-ajax属性。我能够保留属性的唯一方法是在加载页面后通过jQuery设置它们。我一直在互联网上搜索,并没有成功找出为什么会发生这种情况。对此的任何帮助将不胜感激。也许需要更改设置或将其添加到反向代理配置中?
LoadModule proxy_module /usr/lib/apache2-prefork/mod_proxy.so
LoadModule proxy_http_module /usr/lib/apache2-prefork/mod_proxy_http.so
LoadModule proxy_html_module /usr/lib/apache2/mod_proxy_html.so
LoadModule rewrite_module /usr/lib/apache2/mod_rewrite.so
LoadModule headers_module /usr/lib/apache2-prefork/mod_headers.so
LoadModule substitute_module /usr/lib/apache2/mod_substitute.so
LoadModule proxy_balancer_module /usr/lib/apache2/mod_proxy_balancer.so
NameVirtualHost 10.125.186.140:443
NameVirtualHost 10.125.186.140:80
<VirtualHost 10.125.186.140:443>
ErrorDocument 404 /unknown.html
SSLEngine On
SSLCertificateFile /Cert/wildcard.crt
SSLCertificateKeyFile /Cert/wildcard.key
SSLCertificateChainFile /Cert/lawson_root.crt
SSLCertificateChainFile /Cert/entrust_l1e_chain_bundle.crt
ServerName qa-initiation.company.com
SSLProxyEngine on
ProxyReceiveBufferSize 4096
ProxyRequests Off
ProxyHTMLLinks a href
ProxyHTMLLinks area href
ProxyHTMLLinks link href
ProxyHTMLLinks img src longdesc usemap
ProxyHTMLLinks object classid codebase data usemap
ProxyHTMLLinks q cite
ProxyHTMLLinks blockquote cite
ProxyHTMLLinks ins cite
ProxyHTMLLinks del cite
ProxyHTMLLinks form action
ProxyHTMLLinks input src usemap
ProxyHTMLLinks head profile
ProxyHTMLLinks base href
ProxyHTMLLinks script src for
ProxyHTMLEvents onclick ondblclick onmousedown onmouseup \
onmouseover onmousemove onmouseout onkeypress \
onkeydown onkeyup onfocus onblur onload \
onunload onsubmit onreset onselect onchange
ProxyHTMLDocType HTML
ProxyHTMLEnable On
ProxyHTMLExtended On
Header add Access-Control-Allow-Origin https://qa-oe.company.com
ProxyPassMatch (?i)^/(.*) https://onlineinit.companyqa.local/
ProxyPass / https://onlineinit.companyqa.local/
ProxyPassReverse / https://onlineinit.companyqa.local/
ProxyHTMLURLMap https://www.companyqa.local https://qa-oe.company.com l
</VirtualHost>
答案 0 :(得分:1)
抱歉,这不能解决您的问题,但可能会有用。
Apache的mod_proxy_html重写你的html并删除它无法识别的任何属性。例如,
<p style="color:white;" test="test"></p>
转换为
<p style="color:white;"></p>
通过反向代理后。反向代理还添加了DOCTYPE,并将内容包装在html和body标签中(如果不存在)。
除了关闭该文件/文件夹上的html重写之外,我还没有办法避免这种情况。我这样做是为了关闭它打破的页面,并在这些页面中使用相对链接:
<Location /path/to/badly/rewriten/stuff/>
SetOutputFilter none
</Location>
如果有更好的方法,我也想知道!