0

GoogleがJSessionIDをほとんど気にしていないことを理解する前に、FaceletsアプリケーションでURLの書き換え(デフォルトのTomcatの動作)を許可しました。まだ知らない人のために、GoogleはSEO(あなたのURLのセッションID)に関してこれを好きではありません、そして私はこれを修正するためにweb.xmlに以下を含めました:

<session-config>
    <tracking-mode>COOKIE</tracking-mode>
</session-config>

500問題は、これらのjsession IDを持つ古いリンクを参照しているサイトが原因で、SEOを損なう古いリンクからの多くのエラーがあることです。

http://thejarbar.org/views/tutorials/linux/Netbeans-    
Install.xhtml;jsessionid=8D0EF52E48E8BB8BF8A4D7E33F831EFF

更新されたリンクにリダイレクトするページを作成することで、htmlまたはxhtmlサフィックスが付いたページ名のいくつかのエラーを簡単に修正しましたが、セッションIDサフィックスが付いたファイル名を作成できないという問題があります。 Tomcatによって提供されます。

デッドHTMLリンクのリダイレクトは、関連するディレクトリにプレーンな(X)HTMLページを作成し、次のようにメタタグを含めるのと同じくらい簡単です(例)。

  • デッドリンクポイント.../Maven-Setup.xhtml
  • Maven-Setup.xhtml参照された場所に置換を作成します
  • 代わりに私は単に追加します<meta http-equiv="REFRESH" content="0;url=http://thejarbar.org/views/tutorials/linux/Maven- Setup-Tutorial-for-Linux-with-the-Jar-Bar-and-Yucca-Nel.xhtml"></meta>

セッションIDを持つ古いURLに基​​づいてリクエストをリダイレクトするにはどうすればよいですか?私は明らかにこれらのリンクを維持することを好みます。なぜなら、それらが私のサイトにトラフィックをもたらすかもしれないし、そうでないかもしれないので、それ故に私がリダイレクトしたい理由です。

更新web.xmlのurl-patternをマッピングして、すべての着信jsessionidリクエストを新しい「nojsession」サイトに転送することを目的として、redirect.jspを作成しました。

<servlet>
    <servlet-name>redirect</servlet-name>
        <jsp-file>/redirect.jsp</jsp-file>
    </servlet>

    <servlet-mapping>
        <servlet-name>redirect</servlet-name>
        <url-pattern>/*jsessionid*</url-pattern>
    </servlet-mapping>

これはjsessionidでリクエストを転送していません。私は、redirect.jspどちらが正しく転送されるかをテストしました。

更新Baluscの推奨事項と、ここで見つけた別のフィルターに従って、新しいサイトへのリダイレクトに関して機能していないように見えるこれを思いつきました。

package org.thejarbar.web.filters;

import java.io.*;
import java.util.HashMap;
import java.util.Map;
import java.util.regex.Pattern;
import javax.servlet.*;
import javax.servlet.http.*;

public final class JSessionFilter implements Filter {

    public void init(FilterConfig filterConfigObj) {

    }

    public void doFilter(ServletRequest _req, ServletResponse _res,
                         FilterChain chain) throws IOException, ServletException {
        HttpServletRequest req = (HttpServletRequest) _req;
        HttpServletResponse res = (HttpServletResponse) _res;
        String url =req.getRequestURL().toString();

        if(Pattern.compile(Pattern.quote(url), Pattern.CASE_INSENSITIVE).matcher("jsessionid").find()){

            String redirectURL = "http://thejarbar.org";
            res.setStatus(301);
            res.setHeader("Location",redirectURL);
            res.setHeader( "Connection", "close" );
            res.sendRedirect(redirectURL);
        }

        chain.doFilter(req, res);
    }

    public void destroy() { }
}
4

1 に答える 1

0

上記のBalusCの回答とここで見つけた投稿に従って、問題を修正するフィルターをついに入手しました。

私のフィルターは次のように実装されています:

package org.thejarbar.web.filters;

import java.io.*;
import java.util.regex.Pattern;
import javax.servlet.*;
import javax.servlet.http.*;

public final class JSessionFilter implements Filter {

    public void init(FilterConfig filterConfigObj) {

    }

    public void doFilter(ServletRequest _req, ServletResponse _res,
        FilterChain chain) throws IOException, ServletException {
        HttpServletRequest req = (HttpServletRequest) _req;
        HttpServletResponse res = (HttpServletResponse) _res;
        String url =req.getRequestURL().toString();

        if(url.indexOf(";jsessionid=")>0 || 
            url.indexOf("views/tutorials/linux/Maven-Setup.xhtml") > 0 ||
            url.indexOf("views/tutorials/windows/VirtualBox-Setup.xhtml") > 0 ||
            url.indexOf("views/tutorials/windows/Path-Setup.xhtml") > 0 ||
            url.indexOf("views/tutorials/windows/PATH-Setup.xhtml") > 0 ||
            url.indexOf("views/tutorials/linux/Netbeans-Install.xhtml") > 0) {
            String redirectURL = "http://thejarbar.org";
            res.setStatus(res.SC_MOVED_PERMANENTLY);
            res.setHeader("Location",redirectURL);
            res.setHeader( "Connection", "close" );
            return;
        }

        chain.doFilter(req, res);
    }

    public void destroy() { }
}

これは私の古いリンクのそれぞれを更新されたサイトにリンクします。

于 2012-06-22T08:57:48.383 に答える