Apache Rewrite or proxy

南笙酒味 提交于 2020-02-02 04:22:09

问题


I have an Apache server running on my machine (port 80) I have a Zope server running on my machine (port 8080)

i want all users, irrespective of domain (lets use www.example.com for now) to be pushed to the zope instance, seamlessly

IE if i type into my browser http://www.example.com/mysite

it will display the effects of http://www.example.com:8080/mysite

BUT

i want the URL to still say http://www.example.com/mysite

(sub-)domain should be irrespective, as will have 2 or 3 domains pointing to the same server

am i supposed to be looking at mod_rewrite or mod_proxy?

I have the mod_rewrite half working,l but it changes what is in the browser?

currently trying

RewriteEngine on    
RewriteRule ^($|/.*) http://localhost:8080/$1 [P]

but getting server 500

Connecting using "http://localhost/mysite"


回答1:


Zope supports your scenario out-of-the-box with some special rewriting, using a VirtualHostMonster flags in the path. This ensures that any URLs generated by Zope (and by extension, Plone) are correct for proxied requests as well.

You should use both mod_rewrite and mod_proxy, they'll be working in concert.

To make creating the right rewrite URLs easier, someone built an excellent RewriteRule Witch. Plugging in your specific example outputs:

RewriteRule ^/mysite($|/.*) \
http://127.0.0.1:8080/VirtualHostBase/\
http/%{SERVER_NAME}:80/mysite/VirtualHostRoot/_vh_mysite$1 [L,P]

Thus, for any URLs rooted at http://www.example.com/mysite, rewrite these to be served from the server running on localhost port 8080, making sure that Zope generates URLs with the same root.

See the detailed documentation on the VirtualHostMonster feature on the Zope wiki for more details.




回答2:


You can use either mod_rewrite with a P (proxy) rule or mod_proxy to do what you want. Using mod_rewrite your configuration would look something like this:

RewriteRule ^/mysite/(.*) http://www.example.com:8080/mysite/$1 [P]

Using mod_proxy, your config would look like this:

<Location /mysite/>
  ProxyPass http://www.example.com:8080/
  ProxyPassReverse http://www.example.com:8080/
</Location>

Both accomplish approximately the same thing. Using a Location block with ProxyPass makes it easy to apply other configuration directives to this path on the front-end server.



来源:https://stackoverflow.com/questions/11936922/apache-rewrite-or-proxy

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!