Apache mod_rewrite更改PHP脚本中的REAL服务器端口输出

Iva*_*van 2 apache mod-rewrite port

我注意到当使用mod_rewrite时,即使apache在端口8080上,PHP也会返回server_port 80.

即我有这个网址:http://myvirtualhost.8080/index.php和这个PHP片段:

<?php echo $_SERVER['SERVER_PORT']; ?>
Run Code Online (Sandbox Code Playgroud)

在.htaccess中我有这个简单的规则

RewriteEngine on
RewriteRule     ^/?$            index.php           [NC,L]
Run Code Online (Sandbox Code Playgroud)

使用mod_rewrite时,输出为"80"(错误)

关闭mod_rewrite,输出为"8080"(正确)

这是正常的吗?这个简单的解决方案?事实是我需要检查REAL服务器端口以在条件PHP脚本中使用,例如:

<?php 
if ($_SERVER['SERVER_PORT'] == 80) {
do something
} else {
do something else
}
?>
Run Code Online (Sandbox Code Playgroud)

当然这实际上是不可能的,因为SERVER_PORT上的mod_rewrite总是80.我不想乱用.htaccess文件,所以PHP脚本解决方案会很棒......

提前致谢!

小智 5

你需要设置"UseCanonicalPhysicalPort"

UseCanonicalPhysicalPort on
Run Code Online (Sandbox Code Playgroud)

这将确保重写规则将使用与请求相同的端口重写URL.