2010-04-18 7 views
6

Ho riscontrato difficoltà a ottenere qualcosa di più di un semplice indice/a restituire correttamente utilizzando bottle.py in un ambiente CGI. Quando provo a tornare/ciao ottengo una risposta 404. Tuttavia, se chiedo /index.py/helloProblemi con gli URL di instradamento tramite CGI e Bottle.py

import bottle 
from bottle import route 

@route('/') 
def index(): 
    return 'Index' 

@route('/hello') 
def hello(): 
    return 'Hello' 

if __name__ == '__main__': 
    from wsgiref.handlers import CGIHandler 
    CGIHandler().run(bottle.default_app()) 

Ed ecco il mio file .htaccess

DirectoryIndex index.py 
<ifmodule mod_rewrite.c=""> 
RewriteEngine on 
RewriteBase/
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^(.*)$ /index.py/$1 [L] 
</ifmodule> 

ho copiato gran parte del codice da qui come sto usando DH e sembrava rilevante : http://blog.coderonfire.com/2010/02/running-bottle-python-micro-framework.html

Grazie per l'aiuto.

risposta

4

Il problema è che il blocco <ifmodule> non è rilevante per il server Apache e le direttive per mod_rewrite non funzionano. Inizia con il seguente .htaccess e, se ne hai la necessità, aggiungi il blocco in base alla versione corrente di apache.

DirectoryIndex index.py 
RewriteEngine on 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^(.*)$ /index.py/$1 [L] 
+1

Grazie, questo funziona. Ho dovuto rimuovere il precedente/su /index.py/$1 ma poi funziona perfettamente. – Risingson

+0

@ enrico, non sono sicuro che mi piaccia la tua modifica. Farei meglio a rimuovere la barra iniziale anziché rimuovere il RewriteBase. – newtover

+0

L'impostazione di RewriteBase sembra eccessiva quando si tratta solo di una barra, ma certamente rende le cose più semplici se questo dovesse mai cambiare. Tuttavia, la vera ragione per cui non ho rimosso la barra principale è che una modifica deve essere di almeno 6 caratteri, a causa del filtro "modifica significativa". Puoi rimetterlo e rimuovere la barra se è la tua preferenza. – Enrico