我的网站上有这个目录
example.net/cube
除了一个htaccess文件之外,没有其他内容,该文件应该将用户重定向到其他目录
example.net:5000/newdir
但用户仍应example.net/cube在其地址栏上看到www.example.com。这是我的htaccess
RewriteEngine On RewriteRule ^/?$ ../:5000/newdir
但它似乎什么也没做,这是怎么回事?
zu0ti5jz1#
在您的方法实现时,通过内部重写无法实现此操作。原因是从http服务器的Angular 来看,目标URL指向一个完全不同的主机。您可以实现外部重定向,但这将更改客户端地址栏中可见的URL。你唯一的选择是使用http服务器的代理模块 * 如果该模块已经安装并且可用 *。对于apache http服务器,这意味着你必须安装mod_proxy和mod_proxy_http模块。或者确保它们已经安装并且对于你的http主机可用。如果是这样,您有两种选择:您可以使用http服务器主机配置中的代理模块,让http主机“example.com“侦听端口80:
mod_proxy
mod_proxy_http
ProxyRequests off ProxyPass /cube http://example.com:5000/newdir ProxyPassReverse /cube http://example.com:5000/newdir
或者在http主机配置中的/cube文件夹的<Location ...>块内进行了轻微更改:
/cube
<Location ...>
<Location "/cube/"> ProxyRequests off ProxyPass http://example.com:5000/newdir/ ProxyPassReverse http://example.com:5000/newdir/ </Location>
作为一种替代方案,您可以使用嵌入在重写模块中的代理模块,或者在http服务器主机的中央配置中,或者在该主机的顶层DOCUMENT_ROOT文件夹中的分布式配置文件(.htaccess)中:
DOCUMENT_ROOT
RewriteEngine on RewriteRule ^/?cube(.*)$ http://example.com:5000/newdir$1 [P]
或者在/cube文件夹内的分布式配置文件中稍做更改:
RewriteEngine on RewriteRule ^(.*)$ http://example.com:5000/newdir/$1 [P]
无论哪种方式,你都需要开始参考模块的文档。作为典型的开源软件,它的质量非常好,并附带了很好的例子:https://httpd.apache.org/docs/2.4/mod/mod_proxy.html
1条答案
按热度按时间zu0ti5jz1#
在您的方法实现时,通过内部重写无法实现此操作。原因是从http服务器的Angular 来看,目标URL指向一个完全不同的主机。
您可以实现外部重定向,但这将更改客户端地址栏中可见的URL。
你唯一的选择是使用http服务器的代理模块 * 如果该模块已经安装并且可用 *。对于apache http服务器,这意味着你必须安装
mod_proxy
和mod_proxy_http
模块。或者确保它们已经安装并且对于你的http主机可用。如果是这样,您有两种选择:
您可以使用http服务器主机配置中的代理模块,让http主机“example.com“侦听端口80:
或者在http主机配置中的
/cube
文件夹的<Location ...>
块内进行了轻微更改:作为一种替代方案,您可以使用嵌入在重写模块中的代理模块,或者在http服务器主机的中央配置中,或者在该主机的顶层
DOCUMENT_ROOT
文件夹中的分布式配置文件(.htaccess)中:或者在
/cube
文件夹内的分布式配置文件中稍做更改:无论哪种方式,你都需要开始参考模块的文档。作为典型的开源软件,它的质量非常好,并附带了很好的例子:
https://httpd.apache.org/docs/2.4/mod/mod_proxy.html