我目前正在尝试重新配置Apache服务器,以便能够在访问网页时使用另一个不超过80的端口,然后根据端口请求的完成情况执行一些.htaccess魔术。重新配置Vhost和听任何其他端口没有问题,但由于某些原因,所有非ssl请求总是被解释为端口80.Apache和PHP显示错误的端口号
如果我尝试打开页面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)壁虎/ 20100101火狐/ 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。
编辑2:经过一些更多的实验后,我已经推断这个问题可能在我的.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]
你有configued在'ServerName'指令的端口?如果你没有指定一个端口,我怀疑这个默认值是'80',这可能是从哪里来的 – DaveRandom
cillosis:我在想这个,但现在看起来更像是一个mod_rewrite问题(参见我的edit2)我相信这是目前最好的地方 – Lobo
DaveRandom:端口在Vhost中指定,如。可以用其他方式指定吗? –
Lobo