2013-12-18 5 views
3

Я считаю, что я правильно настроил Apache с mod_wsgi и Rewrite Engine. Я использую web.py для обслуживания содержимого. Тест «Hello World» работает, но выход включает в себя корень файла. выглядит так:Web.py Apache mod_wsgi url rewrite

Hello, /var/www/example.com/application/! 

Я включил конфигурации и код.

Вот апач конфигурации:

<VirtualHost *:80> 
    ServerAdmin [email protected] 
    ServerName foodcost.mynetwork.inside 
    ServerAlias foodcost.mynetwork.inside 
    DocumentRoot /var/www/example.com/public_html/ 
    ErrorLog /var/www/example.com/logs/error.log 
    CustomLog /var/www/example.com/logs/access.log combined 
    WSGIScriptAlias//var/www/example.com/application/ 

    Alias /static /var/www/example.com/public_html 

    <Directory /var/www/example.com/application> 
     SetHandler wsgi-script 
     Options ExecCGI 
     Options +FollowSymLinks 
    </Directory> 

    AddType text/html .py 

    <Location /> 
     RewriteEngine on 
     RewriteBase/
     RewriteCond %{REQUEST_URI} !^/static 
     RewriteCond %{REQUEST_URI} !^(/.*)+code.py/ 
     RewriteRule ^(.*)$ code.py/$1 [PT] 
    </Location> 
</VirtualHost> 

Python код:

import web 

urls = (
    '(.*)', 'hello' 
) 

app = web.application(urls, globals(), autoreload=False) 
application = app.wsgifunc() 

class hello: 
    def GET(self, name): 
     if not name: 
      name = 'World' 
     return 'Hello, ' + name + '!' 

if __name__ == "__main__": 
    app.run() 

Update: После игры вокруг с Rewrite я пришел, чтобы обнаружить, что проблема с RewriteRule ^(.*)$ code.py/$1 [PT]. Параметр $1 (параметр) передает корень того, где работает скрипт python, плюс все остальное URL-адрес от корневого URL-адреса.

Так пример этого был бы URL:

http://{rootURL}/tom 

Выход:.

Hello, /var/www/example.com/application/tom! 

Я не могу понять, почему расположение каталога сценария питона передается в

+0

Почему, по вашему мнению, вам нужно переписать URL-адреса? 'WSGIScriptAlias' должен обслуживать ваше приложение напрямую, без необходимости переписывания. –

+0

Я использую этот учебник, чтобы настроить его. http://www.codero.com/knowledge-base/questions/316/How+to+deploy+web.py+applications Я хотел бы, чтобы URL-адрес не отображал code.py. – Jeremy

+0

@Jeremy: В это место входит WSGIScriptAlias; он получает корневой URL-адрес и использует ваш WSGI-скрипт для работы с этим URL-адресом. 'code.py' никогда не будет частью URL в такой конфигурации. –

ответ

2

Следуя руководству по адресу http://webpy.org/cookbook/mod_wsgi-apache, я считаю, что вам действительно не нужно переписывать URL-адреса. Ваш апач конфигурации тогда:

<VirtualHost *:80> 

    ServerAdmin [email protected] 
    ServerName foodcost.mynetwork.inside 
    ServerAlias foodcost.mynetwork.inside 
    DocumentRoot /var/www/example.com/public_html/ 
    ErrorLog /var/www/example.com/logs/error.log 
    CustomLog /var/www/example.com/logs/access.log combined 

    WSGIScriptAlias//var/www/example.com/application/code.py/ 
    Alias /static /var/www/example.com/public_html 

    <Directory /var/www/example.com/application> 
     SetHandler wsgi-script 
     Options ExecCGI 
     Options +FollowSymLinks 
    </Directory> 

    AddType text/html .py 

</VirtualHost> 

(среди прочих изменений, обратите внимание на добавленную code.py/ к WSGIScriptAlias директивы.)

И файл /var/www/example.com/application/code.py является:

import web 

urls = (
    '/(.*)', 'hello' 
) 

app = web.application(urls, globals(), autoreload=False) 
application = app.wsgifunc() 

class hello: 
    def GET(self, name): 
     if not name: 
      name = 'World' 
     return 'Hello, ' + name + '!' 

if __name__ == "__main__": 
    app.run() 

(обратите внимание на добавленный слэш в корневом коде urls.

Таким образом, не появляется «code.py»:

enter image description here

+0

Это сработало спасибо! – Jeremy