Apache和PHP显示错误的端口号

时间:2012-01-23 14:53:46

标签: php apache .htaccess mod-rewrite

我目前正在尝试重新配置Apache服务器,以便在访问网页时能够使用80以外的其他端口,然后根据请求的端口,我会执行一些.htaccess魔法。重新配置Vhost并侦听任何其他端口没有问题,但由于某种原因,所有非ssl请求始终被解释为进入端口80.

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

  

my.site.com:80 my.ip. - - [23 / Jan / 2012:14:37:24 +0100]“GET   /images/pagenav_bg.gif HTTP / 1.1“200 2484   “http://my.site.com:8080/css/all.css”“Mozilla / 5.0(Windows NT 6.1;   WOW64; 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]

2 个答案:

答案 0 :(得分:3)

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

UseCanonicalPhysicalPort on 

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

答案 1 :(得分:0)

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

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

这是通过为每个需要特定案例的端口添加一条规则来解决的,例如

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

正如我在原始问题中的编辑所看到的那样,这起初并不起作用,但这只是因为我的规则出错了。问题解决了。