当前位置: 首页 > 知识库问答 >
问题:

Tomcat 8 URL重写

葛昱
2023-03-14

我有一个AngularJS webapp和泽西后端。我需要设置URL重写,所以除了给定的异常之外,所有内容都将重写到Angular的index.html.

例如:

http://my.domain.com/about will be rewritten
http://my.domain.com/photos/photo1.jpg will NOT be rewritten (file photo 1 exists)
http://my.domain.com/rest/myservice will be NOT be rewritten (it is a call to REST service)

我已经设置了雄猫8 URL重写阀,如下所示:

在conf/server.xml中

<Host name="my.domain.com" appBase="webapps/MyDomainServer" unpackWARs="true"
           autoDeploy="true"
           xmlValidation="false" xmlNamespaceAware="false">
  <Valve className="org.apache.catalina.valves.rewrite.RewriteValve" />
  <!-- access logging, aliases,...-->
</Host>

在conf/Catalina/my . domain . com/rewrite . config中

RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d [OR]
RewriteCond %{REQUEST_FILENAME} ^/rest.*
RewriteRule ^ - [L]

RewriteRule ^ index.html [L]

Tomcat忽略了我的重写设置,没有任何东西被重写,日志中没有错误/异常。我做错了什么?提前感谢。

我试图移动RewriteValveconfig.xml在META-INF和重写配置到WEB-INF,但它的行为方式相同。

共有3个答案

欧君之
2023-03-14

我无法让它与REQUEST_URI一起工作,而且我也不喜欢将特定文件列入白名单,所以我用一种稍微不同的方式解决了这个问题。

湛铭
2023-03-14

这是否部署为 Java 网络应用 (WAR)?您可以在您的Web中实现这一点.xml

<servlet>
   <servlet-name>index</servlet-name>
   <jsp-file>/index.html</jsp-file>
</servlet>

<servlet-mapping>
   <servlet-name>index</servlet-name>
   <url-pattern>/</url-pattern>
   <url-pattern>/about</url-pattern>
   .. as many as you need ..
<servlet-mapping>
张银龙
2023-03-14

我已经找到了解决方案,问题在错误/错误rewrite.config文件中。正确的应该是:

RewriteCond %{REQUEST_URI} ^/(css|img|js|partials|rest|favicon).*$
RewriteRule ^.*$ - [L]

RewriteRule ^.*$ /index.html [L,QSA]

第一行是不应重写的枚举URI。其他所有内容都将重写为index.html。

 类似资料:
  • 上面说这是一次意外的超驰,但这不是偶然的... 我想要的可能吗?还是必须重写方法。我更喜欢kotlin setter..

  • 也许我对概念感到困惑,但是重写和在子类中创建一个新方法之间有什么区别呢?重写不就是在子类中创建一个不同于父类的新的特定方法吗?但这难道不是在子类中创建一个新方法所要做的吗?

  • 本文向大家介绍重载和重写的区别?相关面试题,主要包含被问及重载和重写的区别?时的应答技巧和注意事项,需要的朋友参考一下 方法的重载和重写都是实现多态的方式,区别在于前者实现的是编译时的多态性,而后者实现的是运行时的多态性。 重载发生在一个类中,同名的方法如果有不同的参数列表(类型不同、个数不同、顺序不同)则视为重载。 重写发生在子类与父类之间,重写要求子类重写之后的方法与父类被重写方法有相同的返回

  • 问题内容: 覆盖和过载之间有什么区别? 问题答案: 重载:在编译时根据指定参数的数量和类型选择方法 签名 覆盖:在执行时根据目标对象的实际类型(与表达式的编译时类型相对)选择方法 实现 例如: 这两个调用都是 重载的 示例。有两种方法,称为,编译器确定要调用的签名。 第一次调用是 覆盖 的示例。编译器选择签名“ foo(int)”,但是在执行时,目标对象的类型确定要使用的实现应为in中的一个。

  • 问题内容: 就Java而言,当有人问: 什么是多态性? 将超载或重载是一个可以接受的答案? 我认为还有更多。 如果你有一个抽象基类,它定义了一个没有实现的方法,并且你在子类中定义了该方法,那该方法是否仍然覆盖? 我认为过载不是肯定的正确答案。 问题答案: 表达多态性的最清晰方法是通过抽象基类(或接口) 此类是抽象的,因为该方法不适用于人类。只有男性和女性子类别才可以定义。同样,人类是一个抽象的概念

  • 问题内容: 在AppConfig类的代码中,我们可以看到: 好吧,这是我的例子: my_app / apps.py 我只想使现成的方法起作用。也就是说,当Django找到my_app时,让它运行ready方法。 该应用已在INSTALLED_APPS中注册。 我执行’python manage.py runserver’。并没有打印任何内容。 如果我在ready方法中放置一个断点,则调试器不会在那

  • "The great thing about mod_rewrite is it gives you all the configurability and flexibility of Sendmail. The downside to mod_rewrite is that it gives you all the configurability and flexibility of Send

  • 请参考:http://www.kancloud.cn/manual/thinkphp/1866