【发布时间】: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中指定,例如
。可以用其他方式指定吗? -
你说的是
80和8080,但是你的代码使用了8000。 -
格本:很好的收获。没错,那是因为我使用了多个端口,包括80、443、8080和8000。我错误地复制了错误的代码sn-p。但是原理是一样的,没有一个问题是因为选择的端口号。
标签: php apache .htaccess mod-rewrite