我有一个这样的网址:“mydomain.com/dictionary/Elastizit%E4t.htm”。
我知道这个 URL 很糟糕,我正在迁移一个非常老旧的网站,出于 SEO 原因,我们需要将旧 URL 重定向到新 URL。因此,目前我有大约 14000 个这样的 URL,我需要将它们重定向到它们的新 URL,或者遵循我的 django/python 网络服务器中定义的一些重定向规则。
如果该 URL 命中我的 Python 应用程序,我可以像这样处理它:
>>> from urllib.parse import unquote
>>> unquote('Elastizit%E4t.htm', encoding='latin')
'Elastizität.htm'
但是,nginx 本身出现 400 Bad Request 错误。
我的 Nginx 配置非常简单:
server {
listen 80;
server_name mydomain.com;
client_max_body_size 10M;
location = /favicon.ico { access_log off; log_not_found off; }
location /static/ {
root /srv/mydomain.com/shared/public;
}
location / {
auth_basic "Restricted";
auth_basic_user_file /etc/nginx/.htpasswd;
include proxy_params;
proxy_pass http://unix:/srv/mydomain.com/current/gunicorn.sock;
}
}
对我来说,重要的是网络服务器本身采用 utf-8,我不希望将 iso-8859-1 和类似字符作为我的默认编码。
答案1
事实证明这是大多数 Python 框架中的一个错误,又名https://code.djangoproject.com/ticket/25623和https://github.com/Pylons/pyramid/issues/2047。