Arc*_*ano 5 apache mod-rewrite reverse-proxy
仅当找不到文件时,我才在寻找等效的重定向请求?如果文件丢失,我希望它对另一台服务器执行 ProxyPass 而不是重定向。
这并没有很好地工作,因为它不会处理不以“/”结尾的请求,例如https://site.trajano.net/trajano,它转到代理并改为 redrects。
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule (.*) - [L]
RewriteRule (.*) https://trajano.github.io/%{REQUEST_URI} [P]
Run Code Online (Sandbox Code Playgroud)
我也从不同的答案中尝试了以下方法,效果稍好一些,但会发生什么情况是它重定向到 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]
Run Code Online (Sandbox Code Playgroud)
双方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/
Run Code Online (Sandbox Code Playgroud)
第一个 Rewrite 块处理存在的文件和目录,在这种情况下它返回原始文件块。
下一个重写规则将处理代理。在ProxyPassReverse确保Location返回重写回本地服务器,而不是代理的服务器。
| 归档时间: |
|
| 查看次数: |
2142 次 |
| 最近记录: |