Django在url中解析特殊字符的问题

时间:2009-01-04 13:46:43

标签: django django-urls

我们有一个由Django制作的网站。访问时没有问题 关注本地工作环境的网址:

http://site/tags/c%23/

“c%23”是“c#”的urlencode,在本地工作正常。 但是在我们将它部署到Bluehost托管服务器(apache + fastcgi)之后,此URL已经解析为一个新的地址,如下所示:

http://site/t/tags/c/ 

太奇怪了。可能这不是Django的问题,而是与某些事情有关 Apache url的重写。如果您有任何想法或建议如何解决这个问题,请告诉我。 提前谢谢。

这里可以考虑.htaccess文件:

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] 

和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:如果这是由httpd.conf中的设置引起的,我如何在没有权限的情况下覆盖.htaccess文件?

4 个答案:

答案 0 :(得分:5)

进一步说明之前的一些提示:

您是否尝试过其他字符,例如空格(%20)或带重音的ASCII字符?另外,你是否尝试过将其他字符放在%23之后(斜杠除外)以查看它们是否也被剥离了?

有一种猜测可能是因为#被认为是当前页面上的锚点,所以#和后面的内容将被重写中删除。

答案 1 :(得分:1)

我必须同意第一个答案 - 如果没有访问apache配置,你可能会失败。使用'CSharp'或其他东西可能是最佳选择。

答案 2 :(得分:1)

#在URI中有特殊含义,与/或?相同?确实。你有其他符号这个问题吗?最终,您不应该在URI中使用#符号,除非您在页面上引用了锚点。

答案 3 :(得分:0)