Hi.

I use Tomcat 8.5.23. My context.xml looks like this:

    <?xml version='1.0' encoding='utf-8'?>
    <Context docBase="C:\projects\webapp" reloadable="true">
        <Valve className="org.apache.catalina.valves.rewrite.RewriteValve" />
<WatchedResource>WEB-INF/rewrite.config</WatchedResource>
    </Context>


My rewrite.config looks like this:

    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule (.*) /index.html [L]


I was hoping it would redirect any url to /index.html except if the url is matching an existing file. Instead I get this exception with any url:

java.lang.IllegalArgumentException: The resource path [null] is not valid
        
org.apache.catalina.webresources.StandardRoot.validate(StandardRoot.java:251)
        
org.apache.catalina.webresources.StandardRoot.getResource(StandardRoot.java:212)
        
org.apache.catalina.webresources.StandardRoot.getResource(StandardRoot.java:206)
        
org.apache.catalina.valves.rewrite.ResolverImpl.resolveResource(ResolverImpl.java:156)
        
org.apache.catalina.valves.rewrite.RewriteCond$ResourceCondition.evaluate(RewriteCond.java:81)
        
org.apache.catalina.valves.rewrite.RewriteCond.evaluate(RewriteCond.java:233)
        
org.apache.catalina.valves.rewrite.RewriteRule.evaluate(RewriteRule.java:107)
        
org.apache.catalina.valves.rewrite.RewriteValve.invoke(RewriteValve.java:313)
        
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:81)
        
org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:650)
        
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:342)
        
org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:803)
        
org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
        
org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:868)
        
org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1459)
        
org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
        
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
        
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
        
org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
        java.lang.Thread.run(Thread.java:745)


I debugged a little bit into org.apache.catalina.valves.rewrite.ResolverImpl. In resolve() it recognizes REQUEST_FILENAME and then calls request.getPathTranslated() which returns null however. Stepping into getPathTranslated(), it turns out that request.getPathInfo() is null altogether, which should contain the url information. It almost seems like it isn't initialized at that time.

Is this a bug or am I doing something wrong?

Regards,
Norbert

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
For additional commands, e-mail: users-h...@tomcat.apache.org

Reply via email to