我正在寻找等价的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 :(得分:1)
需要启用mod_rewrite
和mod_proxy
。将以下内容放在VirtualHost
块中(不在Directory
指令内或VirtualHost
以外的任何内容中):
RewriteEngine on
RewriteCond %{DOCUMENT_ROOT}/$1 -f [OR]
RewriteCond %{DOCUMENT_ROOT}/$1 -d
RewriteRule (.*) - [L]
#
# Else proxy
RewriteRule ^/(.*)$ https://trajano.github.io/$1 [P,QSA]
ProxyPassReverse / https://trajano.github.io/
第一个Rewrite块处理存在的文件和目录,在这种情况下它返回原始文件块。
下一个重写规则将处理代理。 ProxyPassReverse
确保将返回的Location
重写回本地服务器而不是代理服务器。