2012-01-23 45 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