apache 是否仅在找不到文件时代理请求?

atmip9wb  于 2022-11-16  发布在  Apache
关注(0)|答案(1)|浏览(113)

我正在寻找一个等效的Redirect requests only if the file is not found?,而不是重定向,我希望它做一个代理传递到另一个服务器,如果一个文件丢失。
这样做效果不太好,因为它不会处理不以“/”结尾的请求,例如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]
wmvff8tz

wmvff8tz1#

mod_rewritemod_proxy都需要启用。请将以下内容放入VirtualHost块中(不要放在Directory指令或VirtualHost以外的任何内容中):

RewriteEngine on

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

第一个重写块处理存在的文件和目录,在这种情况下,它返回原始文件块。
下一个重写规则将处理代理。ProxyPassReverse确保返回的Location被重写回本地服务器,而不是被代理的服务器。

相关问题