【问题标题】:Apache and PHP shows wrong port numberApache 和 PHP 显示错误的端口号
【发布时间】:2012-01-23 14:53:45
【问题描述】:

我目前正在尝试重新配置 Apache 服务器,以便在访问网页时能够使用 80 以外的另一个端口,然后根据请求完成的端口,我做了一些 .htaccess 魔术。重新配置 Vhost 并监听任何其他端口没有问题,但由于某种原因,所有非 ssl 请求总是被解释为来自端口 80。

如果我尝试打开 my.site.com:8080 页面,我的日志会显示类似这样的内容

my.site.com:80 my.ip。 - - [23/Jan/2012:14:37:24 +0100] “获取 /images/pagenav_bg.gif HTTP/1.1" 200 2484 "http://my.site.com:8080/css/all.css" "Mozilla/5.0 (Windows NT 6.1; 哇64; rv:8.0.1) Gecko/20100101 Firefox/8.0.1"

我的 .htaccessrules 条件为“RewriteCond %{SERVER_PORT} ^80$”,PHP $_SERVER['SERVER_PORT'];显示端口 80。

我尝试了不同的端口,甚至禁用了对端口 80 的侦听,这给出了 my.site.com 停止工作的预期结果,但 my.site.com:8080 仍然有效。

所以要明确问题:如何启用/重新配置 apache 以便使用“真实”端口号?

编辑:我刚刚发现这可能与 mod_rewrite 有关。但我还没有找到如何规避它。我也觉得有点奇怪,.htaccess 甚至在任何重写规则运行之前就将端口解释为 80。

Edit2:经过更多试验,我推断问题可能出在我的 .htaccess 文件中。 目前看起来是这样的

RewriteEngine On

#Rewrite rule to allow normal access to existing files
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]

#The normal rewriterule for the framework that is used
RewriteRule ^.*$ index.php [NC,L]

我相信以下情况正在发生。重写完成后,它会从 http://my.site.com:8080/some/url 被 Apache 解释为 my.site.com/index.php,默认情况下是端口 80。我必须将其重写为 my.site.com:8080/index.php反而。但是,以下截图不起作用。

RewriteCond %{SERVER_PORT} ^8080$
RewriteRule ^(.*)$ http://my.site.com:%{SERVER_PORT}/index.php [NC,L]

【问题讨论】:

  • 您是否在ServerName 指令中配置了端口?如果您不指定端口,我怀疑它默认为80,这可能是它来自的地方
  • cilosis:我在考虑这个问题,但现在它似乎更像是一个 mod_rewrite 问题(见我的编辑2)所以我相信这是目前最好的地方
  • DaveRandom:端口在Vhost中指定,例如。可以用其他方式指定吗?
  • 你说的是808080,但是你的代码使用了8000
  • 格本:很好的收获。没错,那是因为我使用了多个端口,包括80、443、8080和8000。我错误地复制了错误的代码sn-p。但是原理是一样的,没有一个问题是因为选择的端口号。

标签: php apache .htaccess mod-rewrite


【解决方案1】:

您可以更新您的 apache 配置以包括:

UseCanonicalPhysicalPort on 

盗自:https://stackoverflow.com/a/10892718/796999

【讨论】:

    【解决方案2】:

    我找到了答案,并且重定向现在可以正常工作。不幸的是,这意味着我必须对重定向进行硬编码,但在这种情况下这是可以接受的。

    问题是,如上面对我的问题的编辑中所述,Apache 和 my.site.com:8080/some/url 被重写为 my.site.com/index.php 的 .htaccess,而不是我的.site.com:8080/index.php.

    通过为需要特定情况的每个端口添加一个规则来解决这个问题,例如

    RewriteCond %{SERVER_PORT} ^8080$
    RewriteRule ^(.*)$ http://my.other.site.com:%{SERVER_PORT}/index.php [NC,L]
    

    从我对原始问题的编辑中可以看出,起初这不起作用,但这只是因为我的规则顺序错误。问题解决了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-10-01
      • 2014-02-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多