我已经寻找解决问题的方法好几天了。不幸的是,没有成功。现在我又试了几天,但最终还是没有解决方案,我请教你。
我在 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
的标志也没有任何意义,不是吗?ProxyPass
ProxyPassReverse
您所说的“根目录”是指配置在那里的应用程序或 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}
也许这会有帮助?