如何结合 Prestashop (PHP) 和 DjangoCMS (Python)

Posted

技术标签:

【中文标题】如何结合 Prestashop (PHP) 和 DjangoCMS (Python)【英文标题】:How to combine Prestashop (PHP) and DjangoCMS (Python) 【发布时间】:2013-05-29 11:39:57 【问题描述】:

我需要用相同的 url 使用 DjangoCMS 和 prestashop,例如:

localhost/shop = prestashop<br> localhost/everythingElse = DjangoCMS<br>

我的 prestashop 安装在 /var/www/prestashop,djangoCMS 安装在 /var/www/djangoCMS

Linux Mint 14 64 位、apache2、mod_python、wsgi...

我试过这个配置:

<VirtualHost *:80>
DocumentRoot "/var/www/djangoCMS"
ServerName localhost
WSGIScriptAlias / "/var/www/djangoCMS/djangoCMS/apache/django.wsgi"
<Directory "/var/www/djangoCMS/djangoCMS/apache">
    Options +ExecCGI
    Order allow,deny
    Allow from all
</Directory>

<VirtualHost *:80>
DocumentRoot "/var/www/prestashop"
ServerName php.localhost
<Directory "/var/www/prestashop">
    Options Indexes FollowSymLinks
    AllowOverride None
    Order Deny,Allow
    Allow from all
</Directory>

Django 在 localhost 上运行良好,但我无法访问 php.localhost:糟糕!谷歌浏览器找不到 php.localhost

【问题讨论】:

可能php.localhost 没有正确解析。您需要在 /etc/hotsts 文件中添加一个条目,或者如果您使用 dns 服务器配置它以正确解析它,并在您的 apache 配置中正确设置 NameVirtualHost 指令。 谢谢 ;) 我在端口 8000 (./manage runserver 8000) 上使用 django,并且在 /etc/hosts 上添加了 php.localhost。现在我必须从 url 中删除 :8000 。再次感谢你的帮助。祝你有美好的一天。 Runserver 只是开发服务器,不适合生产。如果您想从 URL 中删除 :8000,请不要使用 Runserver,而是使用 Apache。 我见过这样构建的网站,但它从来没有很好地体现出来。要么你用两种不同的语言复制大量相同的交互,要么你有两个功能和工作方式不同的网站。 【参考方案1】:

ServerName php.localhost 表示您告诉 Apache 回答对http://php.localhost 发出的任何请求为此,您需要添加 php.localhost 以指向服务器 IP 地址(如果是本地开发环境,则为 127.0.0.1)

这在生产环境中不起作用。我建议使用 ProxyPass,您可以在其中告诉 apache 将所有调用重定向到特定端口。例如:

<VirtualHost *:9090>
    ServerName localhost
    DocumentRoot /var/www/prestashop
    <Directory "/var/www/prestashop">
        AllowOverride All
        Require all granted
    </Directory>
</VirtualHost>

<VirtualHost *:80>
    DocumentRoot "/var/www/djangoCMS"
    ServerName localhost
    WSGIScriptAlias / "/var/www/djangoCMS/djangoCMS/apache/django.wsgi"
    <Directory "/var/www/djangoCMS/djangoCMS/apache">
        Options +ExecCGI
        Order allow,deny
        Allow from all
    </Directory>

    ProxyPass /shop http://localhost:9090
    ProxyPassReverse /shop http://localhost:9090
</virtualHost>

这样你将在端口 9090 中运行 prestashop,在端口 80 中运行 django 并告诉 Apache 将所有调用从 http://localhost/shop 重定向到 http://localhost:9090

【讨论】:

以上是关于如何结合 Prestashop (PHP) 和 DjangoCMS (Python)的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Prestashop 中生成 pdf?

如何在 Prestashop 中将类别页面设置为主页

如何在 prestashop 1.7 中对自定义页面进行 ajax 请求

未找到PrestaShop模块类(名称空间)

php Prestashop 1.7(PHP7)FrontController资产问题

Prestashop 自定义页面与自己的模板