Apache URL Rewrite 像 IIS 那样如何做?

Apache URL Rewrite 像 IIS 那样如何做?

抱歉,如果这个问题在别处有更好的答案,但我还没有掌握通过搜索看到的答案(可能更多地取决于我的搜索词)

我是第一次尝试与 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>

相关内容