Apache2 Rewrite + ProxyPass一起工作

时间:2016-01-02 05:31:16

标签: apache .htaccess codeigniter

我在端口80运行apache web服务器,在端口5000运行flask应用程序。

我需要处理以下网址并相应地指向其端口。

http://hello_world.com/api/v1/en/user/register
http://hello_world.com/api/docs/
http://hello_world.com

我需要做的是

如果网址为http://hello_world.com,请将其指向index.php上的code_igniter路由器。

如果网址为http://hello_world.com/api/docs/,请不要指向code_igniter,直接访问该文件夹。

如果网址为http://hello_world.com/api/v1/en/user/register,请将其指向我在第5000位的烧瓶应用程序。

我有以下conf文件。但是,当我尝试将ProxyPass移植到端口5000时,我一直收到404错误。

File does not exist: /var/www/api/v1

但是,我的烧瓶应用程序路由器应该路由/ api / v1 / ... URI。

我的conf看起来像

<VirtualHost *:80>
    ServerAdmin admin@hello_world.com
    ErrorDocument 404 /index.php

# Rewrite for Code Igniter if the URI doesn't start with /api/
    RewriteCond %{REQUEST_URI} !^/api/(.+)$
    RewriteCond %{REQUEST_URI} !^(index\.php|robots\.txt|fonts|assets|uploads|images)
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ /index.php/$1 [L]

# ProxyPass if the URI is /api/v1/
    ProxyPreserveHost On
    ProxyPass ^/api/v1/(.+)$ http://localhost:5000/api/v1/$1
    ProxyPassReverse ^/api/v1/(.+)$ http://localhost:5000/api/v1/$1

    DocumentRoot /var/www/
    <Directory />
            Options FollowSymLinks
            AllowOverride All
    </Directory>
    <Directory /var/www/>
            Options FollowSymLinks MultiViews
            AllowOverride All
    </Directory>

...

</VirtualHost>

1 个答案:

答案 0 :(得分:0)

代理定义在语义上是错误的。请改为尝试该定义:

ProxyRequests Off 
ProxyPreserveHost On 
ProxyPass "/api/v1/" "http://localhost:5000/api/v1/" 
ProxyPassReverse "/api/v1/" "http://localhost:5000/api/v1/"