Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django URL regex支持旧php页面_Python_Regex_Django_Python 2.7_Django Urls - Fatal编程技术网

Python Django URL regex支持旧php页面

Python Django URL regex支持旧php页面,python,regex,django,python-2.7,django-urls,Python,Regex,Django,Python 2.7,Django Urls,我正在将一个系统从PHP迁移到Python/Django 从旧网站我应该保留访问量最大的URL一段时间,但我正在尝试,我没有找到办法 旧格式为: detalhes.php?tipo=residuo&residuo_id=320 我尝试了下面所有这些URL,但我一直得到404: url(r'^detalhes(?P<antigo>[\w]+)$','core.views.anuncio_antigo',name='anuncio-antigo'), url(r'^detalh

我正在将一个系统从PHP迁移到Python/Django

从旧网站我应该保留访问量最大的URL一段时间,但我正在尝试,我没有找到办法

旧格式为:

detalhes.php?tipo=residuo&residuo_id=320
我尝试了下面所有这些URL,但我一直得到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'),

在同样的情况下,对我有效的解决方案是将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;
}
tipo = request.GET.get('tipo')
residuo_id = request.GET.get('residuo_id')

正确的方法是不使用URL调度程序处理查询字符串。相反,我做了以下工作:

url(r'^detalhes\.php/$', 'core.views.anuncio_antigo',name='anuncio-antigo'),
所有这些php文件现在都将调用我的
anuncio\u antigo
视图。然后在视图中,我使用
请求处理查询字符串。GET
,如下所示:

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;
}
tipo = request.GET.get('tipo')
residuo_id = request.GET.get('residuo_id')

我认为url中不可能有问号。

谢谢singer,但我不想再使用php了,我有新的模型和视图来处理旧的url。是什么阻止你使用web服务器来完成此任务?简单的apache重写规则或nginx位置将完成这项工作。管理这类问题是Web服务器的责任,必须有理由使用框架处理此URL。感谢您的回答,但我需要使用django来完成此操作,尽管有php扩展,但我有新的模型和视图来处理旧页面。