2017-04-15 24 views
1

我正在寻找相当于Redirect requests only if the file is not found?的地方,而不是重定向,如果文件丢失,我希望它为另一台服务器执行ProxyPass。只有在找不到文件时才会进行代理请求?

由于它不会处理不以“/”结尾的请求,因此这种方法效果不佳。 https://site.trajano.net/trajano它转到代理并改为重新指定。

RewriteCond %{REQUEST_FILENAME} -f [OR] 
RewriteCond %{REQUEST_FILENAME} -d 
RewriteRule (.*) - [L] 
RewriteRule (.*) https://trajano.github.io/%{REQUEST_URI} [P] 

我试图从一个不同的答案下面还有哪些工作稍微好一点,但发生的事情是它重定向到GitHub上,而不是代理。

RewriteCond %{DOCUMENT_ROOT}/$1 -f [OR] 
RewriteCond %{DOCUMENT_ROOT}/$1 -d 
RewriteRule (.*) - [S=2] 
# 
# Requested resource does not exist, do rewrite if it exists in /archive 
RewriteCond %{DOCUMENT_ROOT}/archive/$1 -f [OR] 
RewriteCond %{DOCUMENT_ROOT}/archive/$1 -d 
RewriteRule (.*) /archive/$1 [L] 
# 
# Else 
RewriteRule (.*) https://trajano.github.io/%{REQUEST_URI} [P] 

回答

0

两个mod_rewritemod_proxy需要启用的下面是一个VirtualHost块不是Directory块。

RewriteEngine on 

RewriteCond %{DOCUMENT_ROOT}/$1 -f [OR] 
RewriteCond %{DOCUMENT_ROOT}/$1 -d 
RewriteRule (.*) - [L] 
# 
# Else proxy 
RewriteRule (.*) https://trajano.github.io%{REQUEST_URI} [P] 
ProxyPassReverse/https://trajano.github.io/ 

第一个Rewrite块处理存在的文件和目录,在这种情况下,它返回原始文件块。

下一个重写规则将处理代理。 ProxyPassReverse可确保将返回的Location重写回本地服务器而不是代理服务器。

代理重写规则中没有/,因为%{REQUEST_URI}包含前导/

相关问题