2011-01-02 3 views
2

я заметил, что при использовании mod_rewrite, PHP возвращает server_port 80, даже если апач на порт 8080.Apache mod_rewrite изменяет выходной порт реального сервера в PHP скрипт

т.е. у меня есть этот URL: http://myvirtualhost.8080/index.php и это PHP фрагмент:

<?php echo $_SERVER['SERVER_PORT']; ?> 

в .htaccess у меня есть простое правило

RewriteEngine on 
RewriteRule  ^/?$   index.php   [NC,L] 

С mod_rewrite на, выход "80" (неправильно)

С отключением mod_rewrite выход «8080» (правильный)

Нормально ли это? Анимированные решения для этого? Дело в том, что мне нужно проверить порт реального сервера для использования в условном PHP скрипт, что-то вроде:

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

и, конечно, на самом деле это не представляется возможным, так как с mod_rewrite на SERVER_PORT всегда 80. Я предпочитают не возиться с файлом .htaccess, поэтому решение для PHP-скриптов будет отличным ...

Заранее благодарим!

ответ

1

Вы также можете переписать порт сервера, добавив двоеточие и номер порта или переменную SERVER_PORT: www.example.com:%{SERVER_PORT}. Проверьте apache documentation.

+0

Я бы очень хотел, чтобы избежать жесткого кода имя сервера ... есть ли решение, которое не связано с этим? До сих пор я нашел решение на форуме SitePoint: http://www.sitepoint.com/forums/showthread.php?t=518318 – Ivan

+0

Ответ в том же абзаце документации apache: используйте '% {HTTP_HOST}'. – weltraumpirat

5

Вы должны установить «UseCanonicalPhysicalPort»

UseCanonicalPhysicalPort on 

это будет гарантировать, что правила перезаписи будет переписать URL с тем же портом, что и запрос.

+0

Это отлично работает для меня - и посмотрите на некоторые открытия! – Coops

Смежные вопросы