2013-10-28 43 views
0

設置我有一個要求,在這裏我必須從遠程主機名提取值,並將其設置在例如標題,如果URL是這樣的 -
http://data1-data2.server.com/someuri
的Apache的conf獲取價值和頭

從上面的例子中,data1和data2需要被提取並設置在頭部,即X-HEADER1 = data1 & X-HEADER2 = data2。

我最初試圖重寫規則卻發現,這是隻適用於URI,而不是服務器名

RewriteRule (?<=//)(.*)(?=-) - [E=INFO_REQUEST_CONTEXT_1:$1,NE] 
RewriteRule (?<=-)(.*?)(?=[.]) - [E=INFO_REQUEST_CONTEXT_2:$1,NE] 
RequestHeader set X-HEADER1 "%{INFO_REQUEST_CONTEXT_1}e" 
RequestHeader set X-HEADER2 "%{INFO_REQUEST_CONTEXT_2}e" 

什麼是正確的配置使用?

回答

0

啓用mod_rewritemod_headers通過httpd.conf(如果尚未啓用),然後把這個代碼在你DOCUMENT_ROOT/.htaccess文件:

RewriteEngine On 

# capture REMOTE_HOST components in env variables 
RewriteCond %{REMOTE_HOST} ^([^-]+)\.([^.]+)\. 
RewriteRule^- [E=INFO_REQUEST_CONTEXT_1:%1,E=INFO_REQUEST_CONTEXT_2:%2,L] 

## set custom response headers to be used in server side scripts 
RequestHeader set X-HEADER1 "%{INFO_REQUEST_CONTEXT_1}e" 
RequestHeader set X-HEADER2 "%{INFO_REQUEST_CONTEXT_2}e" 

## set custom response headers  
Header always set X-HEADER1 "%{INFO_REQUEST_CONTEXT_1}e" 
Header always set X-HEADER2 "%{INFO_REQUEST_CONTEXT_2}e" 

mod_headers reference

+1

」不是個這將設置響應頭中的變量而不是請求頭?也許這就是問題所在。 :-) – Qben

+0

如何在Web服務器登陸後設置/修改請求頭? – anubhava

+0

不知道你可以,但我猜'RequestHeader'對請求頭做了些什麼。我只是不確定這是否是問題所在。 – Qben

1

以下配置工程,

# Extract data1 from URL and set the header 
SetEnvIf Host "(.*)(?=-)" var1=$1 
RequestHeader set X-HEADER1 %{var1}e env=var1 
# Extract data2 from URL and set the header 
SetEnvIf Host "(?<=-)(.*?)(?=[.])" var2=$1 
RequestHeader set X-HEADER2 %{var2}e env=var2