我在端口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>
答案 0 :(得分:0)
代理定义在语义上是错误的。请改为尝试该定义:
ProxyRequests Off
ProxyPreserveHost On
ProxyPass "/api/v1/" "http://localhost:5000/api/v1/"
ProxyPassReverse "/api/v1/" "http://localhost:5000/api/v1/"