Apache-2.2

Tomcat 的 apache 重定向的 302/301 和 404 重定向問題

  • November 16, 2013

我在 Apache Tomcat 前面使用 Apache HTTPD,並帶有以下虛擬主機:

$ cat /etc/apache2/sites-enabled/onlinetaskboarddotcom 
<VirtualHost *:80>
   ServerAdmin comented@out.com
   ServerName www.onlinetaskboard.com
   ServerAlias onlinetaskboard.com
   DocumentRoot /home/ubuntu/www/apache/onlinetaskboarddotcom

   ProxyPass / http://www.onlinetaskboard.com:8080/
   ProxyPassReverse /  http://www.onlinetaskboard.com:8080/

   <Directory />
       Options FollowSymLinks
       AllowOverride None
   </Directory>

   <Directory /home/ubuntu/www/apache/onlinetaskboarddotcom/>
       Options Indexes FollowSymLinks MultiViews
       AllowOverride None
       Order allow,deny
       allow from all
   </Directory>

   ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/

   <Directory "/usr/lib/cgi-bin">
       AllowOverride None
       Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
       Order allow,deny
       Allow from all
   </Directory>

   ErrorLog ${APACHE_LOG_DIR}/error.log
   # Possible values include: debug, info, notice, warn, error, crit,
   # alert, emerg.
   LogLevel warn
   CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

www沒有子域的 URL可以正常工作,但是一旦我包含子域 like onlinetaskboard.com/login,那麼我在 Chrome 等某些瀏覽器中會收到 404 錯誤。onlinetaskboard.com/someOtherValidPage``www``www.onlinetaskboard.com

這是我在 Chrome 中觀察到的請求/響應標頭。

帶有www子域:

要求:
請求網址:http://www.onlinetaskboard.com/
請求方法:GET
狀態碼:404 未找到
請求標頭:
接受:text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
接受編碼:gzip、deflate、sdch
接受語言:en-US,en;q=0.8
連接:保持活動
Cookie:JSESSIONID=DE44F60835D23E6AB3CC2A2E8B9D6279
主辦方:www.onlinetaskboard.com
使用者代理:Mozilla / 5.0 (X11; Linux x86_64) AppleWebKit / 537.36 (KHTML, like Gecko) Ubuntu Chromium / 28.0.1500.71 Chrome / 28.0.1500.71 Safari / 537.36
響應標頭:
連接:保活
內容編碼:gzip
內容長度:377
內容類型:文本/html;字元集=ISO-8859-1
日期:格林威治標準時間 2013 年 11 月 14 日星期四 23:39:24
保活:超時=5,最大值=99
伺服器:Apache-Coyote/1.1
變化:接受編碼
X-Pad:避免瀏覽器錯誤

並且沒有www子域:

要求: 
請求網址:http://onlinetaskboard.com/
請求方法:GET
狀態碼:302 找到
請求標頭:
接受:text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
接受編碼:gzip、deflate、sdch
接受語言:en-US,en;q=0.8
記憶體控制:max-age=0
連接:保持活動
Cookie:JSESSIONID=36D1DED5A3F7B5E185FE5D5EDD4457FC
主持人:onlinetaskboard.com
使用者代理:Mozilla / 5.0 (X11; Linux x86_64) AppleWebKit / 537.36 (KHTML, like Gecko) Ubuntu Chromium / 28.0.1500.71 Chrome / 28.0.1500.71 Safari / 537.36
響應標頭:
連接:保活
內容長度:0
日期:格林威治標準時間 2013 年 11 月 15 日星期五 00:04:33
保活:超時=5,最大值=100
位置:http://onlinetaskboard.com/login
伺服器:Apache-Coyote/1.1

這是如何引起的,我該如何解決?

是否有東西在另一端驗證 URL?如果你只是去 ip.address:8080 會發生什麼,你會得到 404 嗎?我只是想知道這是否是tomcat可以做的事情。

此外,如果您添加

“ProxyPreserveHost 開啟”

這將保留請求標頭,以便您可以將其傳遞給 tomcat。

另外,你為什麼擁有這一切?cgi-bin 等:

選項 FollowSymLinks AllowOverride 無

<Directory /home/ubuntu/www/apache/onlinetaskboarddotcom/>
   Options Indexes FollowSymLinks MultiViews
   AllowOverride None
   Order allow,deny
   allow from all
</Directory>

ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/

<Directory "/usr/lib/cgi-bin">
   AllowOverride None
   Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
   Order allow,deny
   Allow from all
</Directory>

ErrorLog ${APACHE_LOG_DIR}/error.log
# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel warn
CustomLog ${APACHE_LOG_DIR}/access.log combined

引用自:https://serverfault.com/questions/555273