2012-01-23 23 views
1

我目前正在尝试重新配置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] 
+0

你有configued在'ServerName'指令的端口?如果你没有指定一个端口,我怀疑这个默认值是'80',这可能是从哪里来的 – DaveRandom

+0

cillosis:我在想这个,但现在看起来更像是一个mod_rewrite问题(参见我的edit2)我相信这是目前最好的地方 – Lobo

+0

DaveRandom:端口在Vhost中指定,如。可以用其他方式指定吗? – Lobo

回答

0

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

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

这是通过添加一个规则,其中需要一个特定的情况下,每个端口解决诸如

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

正如所看到的在我的编辑在原来的问题,这个起初并不工作,但也仅仅是因为我的规则出错的顺序。问题解决了。

+1

你可以用http://%{SERVER_NAME}替换'http:// my.other.site.com'' – Cheery