我的 web.xml 中有这个配置
<servlet>
<servlet-name>welcome</servlet-name>
<servlet-class>com.me.util.WelcomeServletPublic</servlet-class>
<init-param>
<param-name>redirect</param-name>
<param-value>/login/login.action</param-value>
</init-param>
</servlet>
<welcome-file-list>
<welcome-file>welcome</welcome-file>
</welcome-file-list>
在我的开发环境中,这个重定向工作得很好。现在所有东西都移到了我的生产环境中,重定向不起作用。
应该发生的事情是当您转到https://mydomain.com时,它会将您重定向到https://mydomain.com/login/login.action
什么是它重定向到https://login/login.action,它失去了域名
现在让我想知道哪里出了问题的最重要的事情是我的生产服务器是如何配置的。
在前门,我有运行 mod_jk 的 apache。有两个监听器,80 和 443。80 监听器配置了 mod_rewrite 以获取 http:// url 并将其重写为 https://。然后 443 侦听器接收请求并将其转储到 mod_jk,mod_jk 通过端口 8009 将请求重定向到 tomcat。tomcat 正在运行大约 6 个应用程序,每个应用程序都在自己的虚拟主机中。
我从来没有做过这样的配置,也不知道在哪里解决这个问题。我知道我不能将前面的 / 从 servlet 中的 url 中取出,因为如果有人访问 mydomain.com/users,它会将他们重定向到 mydomain.com/users/login/login.action,所以我真的不不知道从哪里开始。
这是我的 apache vhost 配置
<VirtualHost 10.99.10.30:80>
ServerName boardingsurvey.mydomain.org
ServerAlias boardingsurvey.mydomain.org
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
</VirtualHost>
<VirtualHost 10.99.10.30:443>
ServerName boardingsurvey.mydomain.org
ServerAlias boardingsurvey.mydomain.org
DocumentRoot /var/www/vhosts/bss
<Directory "/var/www/vhosts/bss">
AllowOverride None
Options Indexes FollowSymLinks
Order allow,deny
Allow from all
</Directory>
JkMount /* bss
SSLEngine on
SSLCipherSuite ALL:!ADH:!EXP56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL
SSLCertificateFile /etc/apache2/ssl/ssl.crt
SSLCertificateKeyFile /etc/apache2/ssl/ssl.key
SSLCertificateChainFile /etc/apache2/ssl/intermediate.crt
</VirtualHost>
~