基于 URL 的应用程序操作

基于 URL 的应用程序操作

如果这个问题已经被问过,我很抱歉,但我不知道如何以不同的方式提出它——我的搜索都没有找到可以回答这个问题的东西。

我目前正在使用 Windows 11 和 XAMPP,以及 Apache 2.4.x 和 PHP 8.1.x,但我正在寻找的解决方案最终将在使用相同 Apache 和 PHP 版本的 Linux(Ubuntu)服务器上运行。

我有两个网址,比如说,在我的 Windows Host 文件上设置,目前重定向到https://test1.com本地PHP 应用程序。https://test2.comhttp://localhost/testapp

我们的目标是在您从任一域进入 testapp 时设置会话或标志或其他内容,以便我在 PHP 应用程序中可以使用该信息。由于重定向发生在我们进入 PHP 之前,我怀疑执行此操作的地方是在 Apache 中,我需要设置然后检索$_SERVER信息变量的值,或类似的东西。

问题:

我该如何实现这一点?可以实现吗?

编辑:

根据下面 Gerald 的评论,我得出的结论如下:

$_SERVER['SERVER_NAME']现在已经在任何重定向之前捕获了它,然后将其设置在会话变量中,但是当我进入test1.com浏览器时,它显然按照我的指令进入localhost/testapp,然后会话变量丢失。

我现在位于与我按照浏览器输入的地址不同的“站点”,因此这很有意义(至少对我来说)。

在我的 Apache 配置中,我现在有:

LoadModule remoteip_module modules/mod_remoteip.so

<IfModule remoteip_module>
    RemoteIPHeader X-Forwarded-For
</IfModule>

根据@HBruijn给出的答案,我的虚拟主机中也有以下内容:

<VirtualHost *:80>
    ServerName test1.com
    UseCanonicalName Off
    ProxyPass / https://my.loc/
</VirtualHost>

<VirtualHost my.loc:443>
    DocumentRoot "path/to/code/"
    ServerName my.loc:443
    SSLEngine on
    SSLCertificateFile "path\to\server.crt"
    SSLCertificateKeyFile "path\to\server.key"
    UseCanonicalName Off
</VirtualHost>

<VirtualHost my.loc:80>
    DocumentRoot "path/to/code/"
    ServerName my.loc
    UseCanonicalName Off
</VirtualHost>

它似乎没有做任何事情,并且输出$_SERVER全局变量表明它不存在。

次要问题:

有什么方法可以让浏览器中的 URL 保持不变?我可以在 Apache 配置中设置什么吗?

答案1

通过 URL 上的“重定向”,您可以指示网站访问者使用您的网络服务器提供的目标 URL 发出新请求。

当发出目标 URL 请求时,您无法可靠地区分直接针对目标 URL 发出的请求和通过重定向发出的请求。

如果原始 URL 很重要,不应丢失;那么不重定向

您可以通过在 VirtualHost 定义中包含访问者在访问 Web 应用程序时允许使用的所有域名来避免重定向,方法是使用ServerAlias

<VirtualHost *:80>
  ServerName server.example.com
  ServerAlias server server2.example.com server2 localhost *.example.net
  UseCanonicalName Off
  DocumentRoot /path/to/your/content-and-php-code
  # ...
</VirtualHost>

在上面的例子中,你可以使用$_SERVER['HTTP_HOST']

另一种方法是在您当前重定向的域上使用反向代理。然后,对于每个对 example.com 的请求,您的 Web 服务器都会在后台向 发出第二个请求localhost,其中包括 X-FORWARDED-FOR 标头,您可以在后端应用程序中使用该标头。

就像是:

<VirtualHost localhost:80>
  ServerName localhost
  UseCanonicalName Off
  DocumentRoot /path/to/your/content-and-php-code
  # ...
</VirtualHost>
<VirtualHost *:80>
  ServerName example.com
  UseCanonicalName Off
  # https://httpd.apache.org/docs/2.4/howto/reverse_proxy.html 
  # https://httpd.apache.org/docs/2.4/mod/mod_proxy.html
  ProxyPass / http://localhost/
  ProxyPassReverse / http://localhost/
  # ...
</VirtualHost>

相关内容