2017-04-15 25 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}包含前導/

相關問題