Problema de Django de resolver caracteres especiales en url
-
03-07-2019 - |
Pregunta
Tenemos un sitio web creado por Django. Y no hay problema cuando el acceso siguiente URL sobre el entorno de trabajo local:
http://site/tags/c%23/
" c% 23 " es urlencode de " c # " ;, que funciona bien localmente. Pero después de implementarlo en el servidor de alojamiento Bluehost (apache + fastcgi), esta URL se ha resuelto en una nueva dirección como esta:
http://site/t/tags/c/
Eso es muy raro. Probablemente no sea un problema de Django, pero tiene algo que ver con Apache url reescribe. Si tiene alguna idea o sugerencia sobre cómo solucionar esto, avíseme. Gracias de antemano.
Aquí está el archivo .htaccess que puede considerarse:
AddHandler fcgid-script .fcgi
#AddHandler fastcgi-script .fcgi
#AddHandler application/cgi .fcgi
#AddHandler cgi-script .fcgi
RewriteEngine On
RewriteBase /
#static file setting
RewriteRule ^(media/.*)$ - [L]
RewriteRule ^(static/.*)$ - [L]
RewriteCond %{REQUEST_URI} !(dispatch.fcgi)
RewriteRule ^(.*)$ dispatch.fcgi/$1 [L]
y el archivo dispatch.fcgi:
#!/home/***/python/bin/python
import sys, os
# Add a custom Python path.
sys.path.insert(0, "/home/***/python")
sys.path.insert(0, "/home/***/working/Django-1.0")
os.chdir("/home/***/working/Django-1.0/project")
os.environ['DJANGO_SETTINGS_MODULE'] = "project.settings"
from django.core.servers.fastcgi import runfastcgi
runfastcgi(["method=threaded", "daemonize=false"])
UPDAET: Si esto es causado por la configuración en httpd.conf, ¿cómo puedo anular el archivo .htaccess mientras no tengo permiso?
Solución
Solo algunos consejos antes de continuar:
¿Has probado con otros caracteres como un espacio (% 20) o un carácter ASCII acentuado? Además, ¿ha intentado poner otros caracteres después del% 23 (que no sea la barra) para ver si también están despojados?
Una suposición podría ser que, dado que el # se considera como un ancla en la página actual, el # y todo lo que esté después se eliminará en la reescritura.
Otros consejos
Tendría que estar de acuerdo con la primera respuesta, y sin acceso a la configuración de apache, es posible que no tenga suerte. Usar 'CSharp' o algo por el estilo podría ser el camino a seguir.
# tiene un significado especial en URI, igual que / o? hace. ¿Tienes este problema con otros símbolos? En última instancia, no debería usar un signo # en un URI de todos modos, a menos que se refiera a un ancla en la página.
http://httpd.apache.org/docs/2.2/rewrite /rewrite_guide.html
Lea la sección de reescritura de anclaje.