在使用fastcgi和apache托管的django app中隐藏来自url的fcgi脚本文件名

时间:2016-07-20 22:52:38

标签: apache .htaccess fastcgi mod-fcgid django-deployment

我有 .htaccess 文件 -

AddHandler fcgid-script .fcgi
DirectoryIndex index.fcgi

<IfModule mod_rewrite.c>
  RewriteEngine On
  RewriteBase /
  RewriteRule ^index\.fcgi$ - [L]
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteRule ^(.*)$ /index.fcgi/$1 [L]
</IfModule>

并关注 index.fcgi 文件:

#!/home/username/mydjango/bin/python
    import os
    import sys

    from flup.server.fcgi import WSGIServer
    from django.core.wsgi import get_wsgi_application

    sys.path.insert(0, "/home/username/mydjango")
    os.environ['DJANGO_SETTINGS_MODULE'] = "testproject.settings"

    WSGIServer(get_wsgi_application()).run()

Django应用程序成功运行,但插入&#39; index.fcgi&#39;在这样的URL中 -

www.example.com/index.fcgi/admin ,而不是 www.example.com/admin

如何从网址中删除脚本名称?

我尝试按照这里的说明进行操作 - http://flask.pocoo.org/docs/0.10/deploying/fastcgi/

但它适用于烧瓶,我无法让它运行Django。

P.S - 我在共享主机方案中没有服务器的root访问权限。

1 个答案:

答案 0 :(得分:1)

我刚刚在.htaccess文件中添加了这个。它足以从URL隐藏index.fcgi。

<IfModule mod_fcgid.c>
   AddHandler fcgid-script .fcgi
   <Files ~ (\.fcgi)>
       SetHandler fcgid-script
       Options +FollowSymLinks +ExecCGI
   </Files>
</IfModule>

<IfModule mod_rewrite.c>
   Options +FollowSymlinks
   RewriteEngine On
   RewriteBase /
   RewriteCond %{REQUEST_FILENAME} !-f
   RewriteRule ^(.*)$ index.fcgi/$1 [QSA,L]
</IfModule>