使用 mod_rewrite 隐藏 Rocket.Chat URL 中的路径

使用 mod_rewrite 隐藏 Rocket.Chat URL 中的路径

我已经寻找解决问题的方法好几天了。不幸的是,没有成功。现在我又试了几天,但最终还是没有解决方案,我请教你。

我在 Univention 服务器上安装了应用程序“Rocket.Chat”。它将自身安装为 Docker 容器。

我为 Rocket.Chat 创建了一个子域名“chat.example.com”,它指向 Univention 服务器。要调用 Rocket.Chat,我必须在浏览器中输入:

https://chat.example.com/rocketchat/home

我不喜欢这样。我希望这样:

https://chat.example.com

我直接进入 Rocket.Chat。我也使用 MOD_REWRITE 管理了这个问题。但随后浏览器https://chat.example.com/rocketchat/home又显示完整的 URL ( )。

为了防止这种情况我尝试了以下方法:

RewriteEngine on
RewriteCond %{HTTP_HOST} ^chat.example.com$ [NC]
RewriteRule ^/(.*)$ /rocketchat/home/ [P,L]

我哪里犯了错误?

尽享

答案1

RewriteCond %{HTTP_HOST} ^chat.example.com$ [NC]
RewriteRule ^/(.*)$ /rocketchat/home/ [P,L]

对此有几个疑问:

  • 为什么要使用该P标志?这将使用 mod_proxy 来代理人请求?
  • 这匹配每一个URL 并重写为单个 URL?您的示例仅提到重写根?
  • 您的示例未在目标中包含尾部斜杠,但您在此规则中包含了尾部斜杠?是home物理子目录吗?

请尝试以下方法,假设此规则位于服务器(或者虚拟主机) 语境:

RewriteCond %{HTTP_HOST} ^chat\.example\.com [NC]
RewriteRule ^/$ /rocketchat/home/ [L]

不过,这是否有效可能仍然取决于聊天应用程序本身。

答案2

感谢您的支持!我正在尝试理解mod_rewrite。我刚刚查看了 Apache 文档mod_proxy。我想我不需要该P标志,因为我只想重写 URL。

如果我正确理解了文档,那么像我所做的例子是:没有“ ”和“ ”P的标志也没有任何意义,不是吗?ProxyPassProxyPassReverse

您所说的“根目录”是指配置在那里的应用程序或 Web 服务器或 VHOST 的目录吗?毕竟,那是在 Docker 容器中。或者您所说的“根目录”是指 Docker“外部”的 VHOST,即我现在尝试在此处配置的 Univention 服务器上的 VHOST?

所以我需要\在每一项前面添加“ ” RewriteCond

我不知道“home”是否是物理目录。我只是在浏览器中看到它。我打开了 Docker 容器的 shell,但在那里没有找到任何 Web 服务器配置。

然后我尝试了如下方法。一次使用 ... home/,然后使用home..。

结果总是一样的:

未找到 未在此服务器上找到请求的 URL。

答案3

为了测试 Rocket.Chat 的状态,我可以在 Univention 主机上输入以下内容。

root@gw01:~# curl -i http://127.0.0.1:40001/rocketchat/api/info
HTTP/1.1 200 OK
X-XSS-Protection: 1
X-Content-Type-Options: nosniff
X-Frame-Options: sameorigin
Content-Security-Policy: default-src 'self' ; connect-src *; font-src 'self'  data:; frame-src *; img-src * data:; media-src * data:; script-src 'self' 'unsafe-eval' ; style-src 'self' 'unsafe-inline' 
X-Instance-ID: QkBHePxDKXAd2ZaNk
Cache-Control: no-store
Pragma: no-cache
content-type: application/json
access-control-allow-origin: *
access-control-allow-headers: Origin, X-Requested-With, Content-Type, Accept, X-User-Id, X-Auth-Token
Vary: Accept-Encoding
Date: Sat, 19 Feb 2022 10:54:44 GMT
Connection: keep-alive
Keep-Alive: timeout=5
Transfer-Encoding: chunked

{"version":"3.18.2","success":true}

也许这会有帮助?

相关内容