包含端口的http_主机的apache重写规则

包含端口的http_主机的apache重写规则,apache,.htaccess,redirect,mod-rewrite,url-rewriting,Apache,.htaccess,Redirect,Mod Rewrite,Url Rewriting,在本地网络中,我有一个synology服务器,它在docker的不同端口上运行许多服务,并且可以在浏览器中访问这些服务 192.168.1.2:8989或server.spb.lan:8989 如何制定重写规则,将它们转换为192.168.1.2/servicename或server.spb.lan/servicename 那样 192.168.1.2:8989 -> 192.168.1.2/servicename server.spb.lan:8989 -> serv

在本地网络中,我有一个synology服务器,它在docker的不同端口上运行许多服务,并且可以在浏览器中访问这些服务
192.168.1.2:8989
server.spb.lan:8989

如何制定重写规则,将它们转换为
192.168.1.2/servicename
server.spb.lan/servicename

那样

192.168.1.2:8989     ->  192.168.1.2/servicename
server.spb.lan:8989  ->  server.spb.lan/servicename

根据你们展示的样品,你们能试一下吗。请确保在将这些规则放入htaccess文件后清除浏览器缓存

RewriteEngine ON
RewriteCond %{HTTP_HOST} 192\.168\.1\.2
RewriteCond %{REQUEST_URI} ^/servicename [NC]
RewriteRule ^ http://%{HTTP_HOST}:8989%{REQUEST_URI} [NE,L]

RewriteCond %{HTTP_HOST} server\.spb\.lan
RewriteCond %{REQUEST_URI} ^/servicename [NC]
RewriteRule ^ http://%{HTTP_HOST}:8989%{REQUEST_URI} [NE,L]

我假设这些后端服务是基于http协议运行的,因为您没有指定任何其他内容

最简单的方法可能是使用apache代理模块公开这些后端服务。您可以在重写模块中使用它,这使得该方法非常方便:

RewriteEngine on
RewriteRule ^/?servicename(/.*)$ https://server.spb.lan:8989$1 [P]
重写模块的替代方案是实现反向代理:

ProxyRequests off
ProxyPass /servicename https://server.spb.lan:8989
ProxyPassReverse /servicename https://server.spb.lan:8989

我建议您阅读apache文档中的详细信息。作为典型的开源软件,它的质量非常好,并且有很好的例子。

我无法解决直接安装在Synology上的apache的问题。所以我就删了,删了这个网站。然后在docker中安装nginx。Synology集成了运行在端口80上的nginx,该端口无法删除,并且无法访问其设置。 所以我刚刚将nginx容器的内部端口80映射到Synology上的端口82,将端口80从路由器转发到Synology上的端口82。 然后在nginx容器的配置中,我对docker中运行的每个应用程序都做了简单的配置

server {
    server_name sonarr.lan;
    location / {
        proxy_pass http://192.168.1.2:8989;
    }
}

为了更好地理解这个问题,你可以发布一个url的例子,比如从哪个url转换到哪个url。我想问题中写得很清楚。但无论如何,我补充说,我删除了所有的浏览器历史记录,包括APSSOWS、cookie和所有选项,但您的解决方案不起作用。我忘了提到这些服务,它们目前只使用IP:PORT语法运行在docker容器中。所以他们没有htaccess文件。我唯一拥有的是——每个docker应用程序都有暴露于服务器的端口。所以我只能添加virtualhost.conf文件,并将您的代码添加到conf文件中。@schel4ok,ohhhh这在问题中没有提到,现在它改变了很多,我不确定docker,如果我在这台主机上执行
netstat-lntp
时,我会看到端口
tcp6 0:::8989::*LISTEN 9118/docker proxy
,所以我想这台机器上运行的apache应该可以看到
RewriteRule
指令似乎缺少第一个参数(模式)。但是,您不能在内部将请求从一个端口重写到另一个端口。上述操作将隐式触发外部(302)重定向。如果无法更改基础端口,则需要在这些docker服务之前实现反向代理作为附加服务。(?)