他们说,Apache的mod_rewrite是URL操纵的瑞士军刀,但它可以做到这一点?
比方说,我想添加一个新的应用程序到我的Apachenetworking服务器,其中应用程序的唯一可configuration选项是一个端口号。
我想用“ http://hostname.example.com/app ”而不是“ http://hostname.example.com:8080 ”的forms发布URL。 这样可以确保客户也能通过该机构的防火墙,而且通常更加整洁。
我的应用程序在php,javascript和css中包含绝对URI,所以我想在应用程序的内部链接中将我自己的根位置添加到URI中。 我无法访问DNSlogging,因此无法创build另一个基于名称的虚拟服务器。
使用Apache的mod_rewrite和mod_proxy模块,我可以透明地将客户redirect到正确的应用程序主页。 但是,在该主页内的链接不指向客户端链接相对于新的基地址。
那么,将请求代理到正在侦听特定端口的应用程序的最佳方法是什么?
例如,如果我有一个应用程序在8080端口上侦听,我可以把它放在我的Apacheconfiguration中:
<VirtualHost *:80> SSLProxyEngine On ServerName myhost.example.com RewriteEngine On UseCanonicalName On ProxyVia On <Location "/application"> RewriteRule ^/application/?(.*) http://localhost:8080/$1 [P,L] </Location> </VirtualHost>
如果应用程序不使用绝对URL,这将工作得很好,但它确实如此。 我需要做的是重写由应用程序的CSS,JavaScript和PHP返回的url。
我已经看了ProxyPass和ReverseProxyPass文档,但我不认为这些工作..?
我也遇到了Nick Kew的mod_proxy_html ,但是这并不包括在标准的Apache Distribution中,而且我的机构的web服务器在没有它的情况下似乎已经很好了。除了手动拖网(或者使用grep -r | sedtypesexpression式)通过应用程序的源代码,或者使用这个第三方插件,还有其他方法可以解决这个问题吗?
我可以使用mod_rewrite规则中的一些内部服务器variables吗? 例如,基于'HTTP_REFERER'的重写规则?
使用mod_proxy会工作得很好。 例如,我将https://localhost/yalla/
映射到我的web服务器的子目录:
Loadmodulee proxy_module modules/mod_proxy.so ProxyRequests On <Proxy *> Order deny,allow Allow from localhost </Proxy> ProxyPass /yalla/ http://yalla.ynfonatic.de/tmp/
如果你实现这个,你会注意到目录列表的图片是不可见的; 这是因为它们位于远程服务器上的/ tmp /目录下面 ,因此不可见。
所以,在你的情况下,你会这样做:
Loadmodulee proxy_module modules/mod_proxy.so ProxyRequests On <Proxy *> Order deny,allow Allow from localhost # Or whatever your network is if you need an ACL </Proxy> ProxyPass /app/ http://hostname.example.com:8080/
与Apache配置中的所有内容一样,在引用目录时请注意那些尾部的斜线。
祝你好运! 亚历克斯。