2013-04-22 27 views
0

我正在将系统从PHP迁移到Python/Django。Django的Url正则表达式来支持旧的PHP页面

从旧网站我shuld保持访问量最大的网址一段时间,但我试图,我did not找到一种方法。

旧的格式为:

detalhes.php?tipo=residuo&residuo_id=320 

我已经尝试了所有这下面的网址,但我不断收到404:

url(r'^detalhes(?P<antigo>[\w]+)$','core.views.anuncio_antigo',name='anuncio-antigo'), 
url(r'^detalhes(?P<antigo>[\w_-]+)$','core.views.anuncio_antigo',name='anuncio-antigo'), 
url(r'^detalhes\.php\?tipo\=residuo\&residuo_id\=(?P<antigo>[\w_-]+)$','core.views.anuncio_antigo',name='anuncio-antigo'), 
url(r'^(?P<antigo>[\w_-]+)$','core.views.anuncio_antigo',name='anuncio-antigo'), 

我总是收到此:

[22/Apr/2013 20:08:58] "GET /detalhes.php?tipo=residuo&residuo_id=58 HTTP/1.1" 404 7099 

回答

0

做什么,我试图做的是不处理的URL调度查询字符串的正确方法。相反的,我已经做到了这一点:

url(r'^detalhes\.php/$', 'core.views.anuncio_antigo',name='anuncio-antigo'), 

任何的PHP文件的现在叫我anuncio_antigo视图。然后,针对我处理使用request.GET查询字符串,像这样:我认为这是不可能有一个问号在URL

tipo = request.GET.get('tipo') 
residuo_id = request.GET.get('residuo_id') 

1

在同一情况下为我工作的解决方案是将Web服务器配置为在不同引擎上路由请求。我们与使用nginx的配置是这样的:

location ~ ^/(django\/adm|someurl|)/.*$ { 
    uwsgi_pass unix:/var/www/path/to/uwsgi.sock; 
    include uwsgi_params; 
    } 

location ~ ^/(_.*\.php)$ { 
    fastcgi_pass php_fastcgi; 
    fastcgi_param SCRIPT_FILENAME /var/www/path/to/index/php/$1; 
    fastcgi_param DOCUMENT_ROOT /var/www/path/to/index/php/$1; 
    include fastcgi_params; 
} 
+0

感谢歌手,但我不想再使用PHP了,我有新的模型和意见来处理旧的网址。 – 2013-04-22 23:46:42

+0

什么阻止您使用您的Web服务器来执行此任务?简单的apache重写规则或nginx位置将完成这项工作。管理这类问题是web服务器的责任,必须有一个理由来处理这个与框架的URL。 – singer 2013-04-23 00:01:23

+0

谢谢你的答案,但我需要使用django来做到这一点,尽管php扩展名,我有新的模型和视图来处理旧的页面。 – 2013-04-23 20:17:35