我目前正在嘗試重新配置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