Problema di Django nella risoluzione di caratteri speciali in url
-
03-07-2019 - |
Domanda
Abbiamo un sito Web creato da Django. E non ci sono problemi quando si accede seguente URL sull'ambiente di lavoro locale:
http://site/tags/c%23/
" c% 23 " è il codice url di " c # " ;, che funziona bene localmente. Ma dopo averlo distribuito sul server di hosting Bluehost (apache + fastcgi), questo URL è stato risolto in un nuovo indirizzo come questo:
http://site/t/tags/c/
È troppo strano. Probabilmente non è un problema di Django, ma ha qualcosa a che fare con La riscrittura dell'URL di Apache. Se hai qualche idea o suggerimento su come risolvere questo problema, faccelo sapere. Grazie in anticipo.
Ecco il file .htaccess che può essere considerato:
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]
e il file 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: Se ciò è causato dalle impostazioni in httpd.conf, come posso sovrascrivere il file .htaccess mentre non ne ho il permesso?
Soluzione
Solo alcuni suggerimenti prima di andare oltre:
Hai provato con altri caratteri come uno spazio (% 20) o un carattere ASCII accentato? Inoltre, hai provato a mettere altri personaggi dopo% 23 (oltre alla barra) per vedere se sono anche spogliati?
Un'ipotesi potrebbe essere che, poiché # viene considerato come un'ancora nella pagina corrente, # e tutto ciò che viene dopo verranno rimossi nella riscrittura.
Altri suggerimenti
Dovrei essere d'accordo con la prima risposta - e senza l'accesso alla configurazione di Apache, potresti essere sfortunato. L'uso di "CSharp" o qualcosa del genere potrebbe essere la strada da percorrere.
# ha un significato speciale in URI, uguale a / o? lo fa. Hai questo problema con altri simboli? Alla fine, non dovresti comunque usare un segno # in un URI, a meno che non ti riferisca a un'ancora sulla pagina.
http://httpd.apache.org/docs/2.2/rewrite /rewrite_guide.html
Leggi la sezione di riscrittura dell'ancora.