2016-04-04 22 views
3

Ev URL'si olan Python/Flask uygulamasında basit bir uygulama oluşturdum (www.site.com/). Bir HostGator paylaşılan hesabı barındırmak için aldım, bu yüzden sadece .htaccess erişimim var, ancak başka bir Apache yapılandırma dosyası yok.Kök URL'de (/ - yolsuz) bir FastCGI betiğini nasıl çalıştırabilirim?

Uygulamayı çalıştırmak için bir FastCGI betiği kuruyorum (these instructions'u izleyerek), ancak URL'nin bir /index.fcgi veya başka bir yola sahip olmasını gerektirir. Kök yolunu (/) doğrudan FastCGI betiği tarafından sunulabilir miyim? Ayrıca, /static/ ve /favicon.ico gibi klasörler Apache tarafından sunulmalıdır. Ben .htaccess olarak var şimdi ne

geçerli:

AddHandler fcgid-script .fcgi 
DirectoryIndex index.fcgi 

RewriteEngine On 
RewriteBase/
RewriteRule ^index.fcgi$ - [R=302,L] 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)$ index.fcgi/$1 [R=302,L] 

emin değilim ama Apache sürüm 2.2 olduğunu düşünüyorum.

cevap

3

Bilginize: Sen, FastCGI kurulum için

apachectl -V # or /<pathwhereapachelives>/apachectl -V 

ile apache sürümünü kontrol bu bağlantıyı yardımcı olur görebilirsiniz. Eğer / komut dosyası çalıştırmak istiyorsanız http://redconservatory.com/blog/getting-django-up-and-running-with-hostgator-part-2-enable-fastcgi/

Temelde, (aşağıdaki örnekte olduğu /media gibi) doğrudan statik dosyalara hizmet için mod_rewrite kullanabilir ve diğer her yolu WSGI komut dosyası tarafından sunulmakta:

AddHandler fcgid-script .fcgi 
Options +FollowSymLinks 
RewriteEngine On 

RewriteRule (media/.*)$ - [L] 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^(.*)$ index.fcgi/$1 [QSA,L] 

: url_for() aksi takdirde sonuç, Flask kullandığınız gibi, sen ( here açıklandığı gibi) SCRIPT_NAME istek değişkeni geçersiz kılmak zorunda kalacak,

Not /index.fcgi/... başlayan bir dize olacaktır 10

+2

teorik soru, [tercih edildiğini] cevap verebilir (// meta.stackoverflow.com/q/8259) burada cevabın önemli kısımlarını dahil etmek ve referans için bağlantıyı sağlamak. – manetsus

+0

Birkaç değişiklikten sonra, bu gitmek için yol oldu. Ancak, uygulama hala her 'url_for()' çağrısına '/ index.fcgi' eklenmiştir (Flask kullanıyorum mı demiştim?). Ama ben resmi Flask sitesinde açıklanan 'ScriptNameStripper' bulundu: http://flask.pocoo.org/docs/0.11/deploying/fastcgi/#configuring-apache –

2

Apache yapılandırma ben (her bölüm ne yaptığını açıklayan yorumlarla) bunun için kullanmaktır: Bu iken

# Basic starting point 
DocumentRoot /path/to/document/root 

# Handle static files (anything in /static/ but also robots.txt) 
Alias /static /path/to/document/root/static 
Alias /robots.txt /path/to/document/root/robots.txt 

<Location /robots.txt> 
    SetHandler default-handler 
</Location> 

<Location /static> 
    SetHandler default-handler 
</Location> 

# Handle the FastCGI program on the root 
Alias//path/to/my_fastcgi_program.fgi/ 

# Handle FastCGI 
<Location /> 
    Options ExecCGI 

    AddHandler fcgid-script .pl 
    AddHandler fcgid-script .fcgi 

    Require all granted 
</Location> 
+0

Üzgünüm, bu çözüm izin verilmeyen direktifler kullanır .htaccess dosyasında, örneğin https://httpd.apache.org/docs/current/mod/mod_alias.html#alias –

İlgili konular