#25878: APPEND_SLASH doesn't work with DEBUG=False
-------------------------------+--------------------------------------
Reporter: kuna | Owner: nobody
Type: Bug | Status: new
Component: HTTP handling | Version: 1.9
Severity: Normal | Resolution:
Keywords: slash,debug | Triage Stage: Unreviewed
Has patch: 1 | Needs documentation: 0
Needs tests: 0 | Patch needs improvement: 0
Easy pickings: 0 | UI/UX: 0
-------------------------------+--------------------------------------
Old description:
> I first uploaded it to google groups but I don't find where's my article
> is (I'm not get used to it) so I decided to make a ticket here.
>
> as I mentioned in title, django 1.9's url slash redirection doesn't
> working well in debug=False. APPEND_SLASH was no effect. but in
> debug=True, it does well, and only these 'cached(loaded in debug mode)'
> url redirects well even in debug=False. (I don't know it's browser
> redirection or django's work ...)
>
> anyway, I fixed django/middleware/common.py like this and works well.
> original code was rather a little strange, as I thought.
>
> {{{
> def process_request(self, request):
> """
> Check for denied User-Agents and rewrite the URL based on
> settings.APPEND_SLASH and settings.PREPEND_WWW
> """
>
> # Check for denied User-Agents
> if 'HTTP_USER_AGENT' in request.META:
> for user_agent_regex in settings.DISALLOWED_USER_AGENTS:
> if
> user_agent_regex.search(request.META['HTTP_USER_AGENT']):
> raise PermissionDenied('Forbidden user agent')
>
> # Check for a redirect based on settings.PREPEND_WWW
> host = request.get_host()
>
> redirect = False
> if settings.PREPEND_WWW and host and not host.startswith('www.'):
> host = 'www.' + host
> redirect = True
>
> # Check if we also need to append a slash so we can do it all
> # with a single redirect.
> if self.should_redirect_with_slash(request):
> path = self.get_full_path_with_slash(request)
> redirect = True
> else:
> path = request.get_full_path()
>
> if (redirect):
> return self.response_redirect_class('%s://%s%s' %
> (request.scheme, host, path))
> }}}
>
>
> Hope this issue can be meaningful.
>
> thanks for reading
>
> PS changed a little - previous code won't work with prepending WWW
New description:
I first uploaded it to google groups but I don't find where's my article
is (I'm not get used to it) so I decided to make a ticket here.
as I mentioned in title, django 1.9's url slash redirection doesn't
working well in debug=False. APPEND_SLASH was no effect. but in
debug=True, it does well, and only these 'cached(loaded in debug mode)'
url redirects well even in debug=False. (I don't know it's browser
redirection or django's work ...)
anyway, I fixed django/middleware/common.py like this and works well.
original code was rather a little strange, as I thought.
{{{
def process_request(self, request):
"""
Check for denied User-Agents and rewrite the URL based on
settings.APPEND_SLASH and settings.PREPEND_WWW
"""
# Check for denied User-Agents
if 'HTTP_USER_AGENT' in request.META:
for user_agent_regex in settings.DISALLOWED_USER_AGENTS:
if
user_agent_regex.search(request.META['HTTP_USER_AGENT']):
raise PermissionDenied('Forbidden user agent')
# Check for a redirect based on settings.PREPEND_WWW
redirect = False
host = request.get_host()
if settings.PREPEND_WWW and host and not host.startswith('www.'):
redirect = True
host = 'www.' + host
# Check if we also need to append a slash so we can do it all
# with a single redirect.
if self.should_redirect_with_slash(request):
redirect = True
path = self.get_full_path_with_slash(request)
else:
path = request.get_full_path()
if (redirect):
return self.response_redirect_class('%s://%s%s' %
(request.scheme, host, path))
}}}
Hope this issue can be meaningful.
thanks for reading
PS changed a little - previous code won't work with prepending WWW
--
Comment (by kuna):
I did test and look at the code, and I have question to the behavior.
I found failed test {{{ test_non_ascii_query_string_does_not_crash }}},
and It requires {{{ http://testserver/slash/?drink=caf%C3%A9 }}} to be
redirected(301). I think It doesn't need to be, as there's no need to
prepend WWW(False default) and redirect with slash.
I think the test should changed to {{{ self.assertEqual(r.status_code,
None) }}}, not 301.
and one more thing - this bug has occurred since I upgraded django from
1.8.7 to 1.9. I'm inspecting more about this.
thanks for your sincere.
--
Ticket URL: <https://code.djangoproject.com/ticket/25878#comment:5>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.
--
You received this message because you are subscribed to the Google Groups
"Django updates" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/django-updates/062.5f68bc232d6ac6fc983535cd201c14fe%40djangoproject.com.
For more options, visit https://groups.google.com/d/optout.