UrlRewriteFilter Tuckey не может фильтровать корень сайта (для сканеров)?

Java и AngularJS в Google App Engine.

Что касается того, почему, хотя меня заверили, что большинство сканеров могут анализировать сайты javascript, они не полностью анализируют мой сайт angularjs и, следовательно, не индексируют его должным образом. Я создал статическую версию сайта и хочу перенаправить на нее условно на основе пользовательского агента. Он работает для всех URL-адресов, кроме корня моего сайта или localhost: 8080 с косой чертой или без нее.

Я думаю, это потому, что конфигурация для tuckey UrlRewriteFilter в моем файле web.xml имеет вид /*, поэтому он не срабатывает без косой черты в конце? Однако я пытался изменить это; Я перепробовал все, что мог придумать, изменив версию сервлета на 3.0, используя «файл приветствия», поставив пустую строку для шаблона URL и т. Д.

Спасибо за помощь.

Urlrewrite.xml:

    <?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE urlrewrite PUBLIC "-//tuckey.org//DTD UrlRewrite 4.0//EN"
        "http://www.tuckey.org/res/dtds/urlrewrite4.0.dtd">

<urlrewrite use-query-string="true">

    <rule>
        <condition name="user-agent">
            facebookexternalhit/[0-9]|facebook|Googlebot|Googlebot-Mobile|
            Mediapartners-Google|AdsBot(.*)|AdSense(.*)|(.*)AdsBot|(.*)AdSense|
            Googlebot-Image|Googlebot-Video|Googlebot(.*)|
            FacebookExternalHit/[0-9]|Mediapartners-Google|AdsBot-Google
            |facebookexternalhit/1.0|FacebookExternalHit/1.1|
            FacebookExternalHit/1.0|facebookexternalhit/1.1|Facebot|Twitter|Twitterbot|Pinterest
        </condition>
        <from>^/(.*)$</from>
        <to>/staticview.jsp</to>
    </rule> 
</urlrewrite>

веб.xml:

<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">

  <filter>
      <filter-name>UrlRewriteFilter</filter-name>
      <filter-class>org.tuckey.web.filters.urlrewrite.UrlRewriteFilter</filter-class>
  </filter>
  <filter-mapping>
      <filter-name>UrlRewriteFilter</filter-name>
      <url-pattern>/*</url-pattern>
  </filter-mapping>

  <filter-mapping>
    <filter-name>appstats</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>
  <filter>
    <filter-name>appstats</filter-name>
    <filter-class>com.google.appengine.tools.appstats.AppstatsFilter</filter-class>
    <init-param>
      <param-name>calculateRpcCosts</param-name>
      <param-value>true</param-value>
    </init-param>
  </filter>
  <servlet>
    <servlet-name>appstats</servlet-name>
    <servlet-class>com.google.appengine.tools.appstats.AppstatsServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>appstats</servlet-name>
    <url-pattern>/appstats/*</url-pattern>
  </servlet-mapping>
  <security-constraint>
    <web-resource-collection>
      <web-resource-name>appstats</web-resource-name>
      <url-pattern>/appstats/*</url-pattern>
    </web-resource-collection>
    <auth-constraint>
      <role-name>admin</role-name>
    </auth-constraint>
  </security-constraint>

  <servlet>
    <servlet-name>rss</servlet-name>
    <servlet-class>com.byron.common.controller.RSSServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>rss</servlet-name>
    <url-pattern>/rss</url-pattern>
  </servlet-mapping>
  <servlet>
    <servlet-name>rssfull</servlet-name>
    <servlet-class>com.byron.common.controller.FullRSSServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>rssfull</servlet-name>
    <url-pattern>/rssfull</url-pattern>
  </servlet-mapping>
  <servlet>
    <servlet-name>sitemap</servlet-name>
    <servlet-class>com.byron.common.controller.SitemapServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>sitemap</servlet-name>
    <url-pattern>/sitemap</url-pattern>
  </servlet-mapping>
  <servlet>
    <servlet-name>Jersey REST Service</servlet-name>
    <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
    <init-param>
      <param-name>com.sun.jersey.config.feature.DisableWADL</param-name>
      <param-value>true</param-value>
    </init-param>
    <!--
    Please try to declare your resource classes statically in your Application implementation as
    follows in order to minimize the startup time of your application.
    -->
    <init-param>
      <param-name>javax.ws.rs.Application</param-name>
      <param-value>com.byron.common.controller.Resources</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>Jersey REST Service</servlet-name>
    <url-pattern>/rest/*</url-pattern>
  </servlet-mapping>
</web-app>

person Kafe    schedule 13.01.2018    source источник
comment
Как обновление, не решение, а прогресс. Опять же, меня беспокоит то, что когда я попадаю в корень своего сайта, он на самом деле не проходит через URLRewriteFilter Tuckey. У меня были неоднозначные результаты при добавлении приветственного файла в файл web.xml. <welcome-file-list> <welcome-file>posts</welcome-file> </welcome-file-list> С юзер-агентом гугла перенаправляет рут через посты и на мою статичную версию. Единственный способ, которым я добился рута - › статический. Однако сообщения не являются реальной конечной точкой, поэтому без агента я просто получаю 403 (запрещено) от корня, и в любом случае это кажется обходным путем.   -  person Kafe    schedule 15.01.2018


Ответы (1)


попробуйте сделать явное сопоставление правил для root, например:

<rule>
    <from>^\/?.*$</from>
    <to >[your mapping goes here]</to>
</rule>

(это правило предполагает, что вы используете регулярные выражения, а не подстановочные знаки)

у меня есть это в моем приложении, и оно ловит вызовы localhost:8080

person Stevan Ćurčić    schedule 29.01.2018