I didn't see a commit in the code but I didn't look into what
sendRedirect() does and I don't recall if there is a commit in there
somewhere.
The other option would be the wrap the response in the Filter and
override setStatus() with something like:
@Override
public void setStatus(int status) {
if (status == 302) {
super.setStaus(301);
} else {
super.setStaus(status);
}
}
Completely untested - might not even compile - but you get the idea.
Mark
On 03/02/2022 15:46, Benny Kannengießer wrote:
Hi Mark, thanks for the good idea!
I just tried it - but it didn't work..
The response from Tomcat is still 302!
I suspected that may be the response has already been sent on the wire, so I added some
logging calling "response.isCommitted()" in my filter.
Indeed, the logs show "true"!
I haven't looked at the source code, but now I think the DefaultServlet somehow
also commits the response.
So what else could I do? Make the response buffer bigger?
Do you see any other possibility?
-----Ursprüngliche Nachricht-----
Von: Mark Thomas <ma...@apache.org>
Gesendet: Mittwoch, 2. Februar 2022 18:08
An: users@tomcat.apache.org
Betreff: Re: Redirect with 301 for directory requested without trailing slash
On 02/02/2022 15:21, Benny Kannengießer wrote:
Hi,
I wonder how I could achieve that Tomcat sends a 301 (permanent redirect)
instead of 302 (temporary redirect) when a directory is requested without a
trailing slash.
Currently, when Tomcat receives a request like
http://<domain>/some-directory<http://%3cdomain%3e/some-directory>
it redirects to
http://<domain>/some-directory/<http://%3cdomain%3e/some-directory/>
adding the missing trailing slash.
Apparently the redirect is executed either by the mapper or the DefaultServlet, depending
on the "mapperDirectoryRedirectEnabled" property in the context.
Either way, I would like to have a 301 instead of 302 for SEO reasons.
How can I do this?
Already considered subclassing the Default Servlet but the redirect is in a
private method..
Do I have to write a Valve?
Many thanks for pointing me in the right direction!
If you allow the DefaultServlet to do the redirect you should be able to do
this in a filter.
The directory redirect is the only redirect the Default servlet does and it
doesn't explicitly commit the response so you can take some short-cuts.
I think the following will work:
- map the filter to the default servlet
- once the servlet has executed, check the return code and if it is 302 change
it to 301.
Mark
---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
For additional commands, e-mail: users-h...@tomcat.apache.org
---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
For additional commands, e-mail: users-h...@tomcat.apache.org
---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
For additional commands, e-mail: users-h...@tomcat.apache.org