Quero redirecionar solicitações para um local específico exato para o servidor proxy, mas ambas as soluções não funcionam:
<VirtualHost *:80>
ServerName exmaple.com
<LocationMatch "^/test01$">
ProxyPreserveHost On
ProxyPass http://localhost:8000/
ProxyPassReverse http://localhost:8000/
</LocationMatch>
<ProxyMatch "^/test02$">
ProxyPreserveHost On
ProxyPass http://localhost:8000/
ProxyPassReverse http://localhost:8000/
</ProxyMatch>
</VirtualHost>
Teste:
$ curl -I exmaple.com/test01
HTTP/1.1 404 Not Found
Date: Sun, 17 Jun 2018 15:37:10 GMT
Server: Apache
Content-Type: text/html; charset=iso-8859-1
$ curl -I exmaple.com/test02
HTTP/1.1 404 Not Found
Date: Sun, 17 Jun 2018 15:37:13 GMT
Server: Apache
Content-Type: text/html; charset=iso-8859-1
Quando removo a parte do RegEx, funciona, mas quero que o Apache exiba o 404, não o servidor de desenvolvimento Django:
<LocationMatch "/test01">
ProxyPreserveHost On
ProxyPass http://localhost:8000/
ProxyPassReverse http://localhost:8000/
</LocationMatch>
$ curl -I exmaple.com/test01
HTTP/1.1 200 OK
Date: Sun, 17 Jun 2018 15:42:26 GMT
Server: WSGIServer/0.2 CPython/3.6.5
Content-Type: text/html; charset=utf-8
X-Frame-Options: SAMEORIGIN
Content-Length: 12767
$ curl -I exmaple.com/test01/none
HTTP/1.1 404 Not Found
Date: Sun, 17 Jun 2018 15:42:33 GMT
Server: WSGIServer/0.2 CPython/3.6.5
Content-Type: text/html; charset=UTF-8
X-Frame-Options: SAMEORIGIN
Content-Length: 2073
Atualização: segunda-feira, 18 de junho, 14:40:59 UTC 2018
Então eu fiz algumas pesquisas adicionais e de acordo com os documentos do Apache :
Quando usado dentro de uma
<Location>
seção, o primeiro argumento é omitido e o diretório local é obtido do arquivo<Location>
. O mesmo ocorrerá dentro de uma<LocationMatch>
seção; no entanto, o ProxyPass não interpreta o regexp como tal, portanto, é necessário usar o ProxyPassMatch nessa situação.
Então eu tentei ProxyPassMatch
e funciona, porém o RegEx correspondente é passado para o Proxy http://localhost:8000/test01
e não é isso que eu quero.
Eu posso conseguir isso facilmente com o Nginx:
server {
listen 80;
server_name exmaple.com;
location = /test01/ {
proxy_pass http://localhost:8000/;
proxy_set_header Host $host;
}
}
Como posso fazer algo semelhante com o Apache?
Atualização: Dom 24 de junho 10:46:12 UTC 2018
<LocationMatch "^/test01$">
Redirect / http://test.com/
</LocationMatch>
$ curl -I exmaple.com/test01
HTTP/1.1 302 Found
Date: Sun, 24 Jun 2018 10:47:04 GMT
Server: Apache
Location: http://test.com/test01
Content-Type: text/html; charset=iso-8859-1
A maneira usual com o Apache de resolver o problema de:
é usar um bloco Location simples com ProxyPass e ProxyPassReverse, junto com ProxyErrorOverride e ErrorDocument. Exemplo não testado:
Ver: