0

私は私の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の2つのリスナーがあります。80リスナーは、http:// urlを取得してhttps://に書き換えるようにmod_rewriteで構成されています。次に、443リスナーが要求を受け取り、それをmod_jkにダンプします。mod_jkは、要求をポート8009経由でtomcatにリダイレクトします。tomcatは、それぞれ独自の仮想ホストで約6つのアプリケーションを実行しています。

iveは、このような構成を行う必要はなく、どこでトラブルシューティングを行うべきかわかりません。サーブレットの前の/URLを削除できないことはわかっています。誰かがmydomain.com/usersにアクセスすると、mydomain.com / users / login / login.actionにリダイレクトされるため、実際にはどこから始めればいいのかわからない。

これが私のapachevhost設定です

    <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>


~
4

2 に答える 2

2

これが起こった理由の完全な説明は次のとおりです。

リダイレクトに「/」を追加すると、リダイレクトに使用されるパスは //login/login.action になります。

このタイプの URL は、「プロトコル相対」URL と呼ばれることがよくありますが、正しい名前は「ネットワーク パス参照」です。RFC 3986 を参照してください。セクション 4.2。リダイレクトとして使用される絶対 URL は、<current-protocol>:<network-path reference> を使用して生成されます。この場合、http://login/login.actionが返されます。

通常、ネットワーク パス参照は、ホストを指定したいが、ユーザー エージェントが http を使用しているか https を使用しているかがわからず、リダイレクトに渡される文字列が「//host:port/contextpath/」のようになる場合に、リダイレクトを生成するために使用されます。サーブレットパス/パス情報」. サーブレット仕様 3.0 以前の厳密な解釈では、リダイレクトにネットワーク パス参照を使用することは許可されていません。Servlet 3.1 ではそれらが許可され、Tomcat 7 の最近のバージョンでは Servlet 3.0 以前でも許可されます。

于 2012-05-07T19:02:28.000 に答える
0

上記のhttps://stackoverflow.com/users/1299005/mark-thomasコメントが問題でした。私のwelcomeservletはURLに/を追加していましたが、それが私の書き直しを台無しにしていたものです。

于 2012-05-07T17:40:46.167 に答える