抱歉,如果这个问题在别处有更好的答案,但我还没有掌握通过搜索看到的答案(可能更多地取决于我的搜索词)
我是第一次尝试与 Web 技术相关的任何事物,之前曾很高兴弄清楚如何在一台 IIS 服务器上托管多个站点,因此对我来说技术门槛很低。
一位同事创建了一个内部网站,其中包含一堆指向我们网站上各种 Web 工具的按钮链接,这导致页面显示效果非常糟糕,我们找到了一个解决方案,只有将网站切换到 Apache 服务器后才可行。我拼凑起来,在掌握了虚拟主机和其他一系列东西的基本知识后,就让它运行起来了。
现在,我正尝试将其他网站迁移过来,但遇到了一些在 IIS 上进行了 URL 重写的网站的障碍。例如,我们的帮助台网站托管在单独的服务器上,并从不同的端口运行,因此 DNS 将帮助台指向 Web 服务器,而 IIS 进行了 URL 重写,将请求发送到正确的位置。用户只会在 URL 中看到帮助台,后面跟着他们正在访问的页面,/tickets、/portal 等等。
我已成功为帮助台创建了一个虚拟主机,并进行了重定向,但最终用户获得的是 URL 的完整本地名称和端口号,而不是“helpdesk”。此外,任何指向http://帮助台重定向,但如果我添加特定页面(如 /tickets),链接无法直接工作。显然我做的不对,但我的搜索让我抓狂。
我需要在 apache 中做什么才能获得与通过 IIS 托管在其他内部服务器上的站点相同的结果? 对于简单的逐步操作将不胜感激。
这是我在 web.config 中的内容,它是由 IIS 中的 URL 重写规则创建的:(我已从每行中删除了前面的 <,因此数据显示在本帖中)
<xml version="1.0" encoding="UTF-8"?>
configuration>
system.webServer>
rewrite>
rules>
rule name="Proxy" enabled="true" patternSyntax="Wildcard" stopProcessing="true">
match url="*" />
action type="Rewrite" url="http://servername:9675/{R:1}" />
/rule>
/rules>
/rewrite>
/system.webServer>
</configuration>
这是我在同一站点的 http-vhosts.conf 中创建的内容:
<VirtualHost *:80>
ServerName helpdesk
ServerAlias helpdesk
RedirectPermanent / http://servername:9675
(commented out) ServerAdmin [email protected]
ErrorLog "logs/helpdesk-access.log"
CustomLog "logs/helpdesk-access.log" common
</VirtualHost>
答案1
例如,我们的帮助台网站托管在单独的服务器上,并从不同的端口运行,因此 DNS 将帮助台指向 Web 服务器,而 IIS 会重写 URL,将请求发送到正确的位置。用户只会在 URL 中看到帮助台,后面跟着他们正在访问的页面,/tickets、/portal 等等。
这听起来像是一条用作反向代理的重写规则。在 Apache 中,您可以使用ProxyPass
指令,而不是指令Redirect
(指示 Web 浏览器资源已移至其他 URL,并指示浏览器更改地址栏中的 URL 并向目标位置发送新请求)
<VirtualHost *:80>
ServerName helpdesk
ProxyPass / http://servername:9675/
ProxyPassReverse / http://servername:9675/
...
</VirtualHost>