2011-03-21 6 views
3

私は、私はこのようなサーバーを使用しているセットアップがあります。ApacheのヘッダにSCRIPT_URIを書き込むにはどうすればよいですか?

ロードバランサを - >アパッチ - > Tomcatの

私は、クライアントがヘッダーに使用するURLを記述するようにApacheをしたいと思いますので、私はそれを読むことができますかつて私はtomcatをヒットした。

私はmod_rewriteとmod_headersを使用しようとしましたが、それはやっていますが運がありません。 私はhttp://httpd.apache.org/docs/2.0/mod/mod_rewrite.htmlを見れば、私がSCRIPT_URIという変数が必要であることを明確に思える:

SCRIPT_URI=http://en1.engelschall.com/u/rse/ 

私もこのhttp://www.askapache.com/htaccess/crazy-advanced-mod_rewrite-tutorial.htmlでとても十分なヘッダを作成する方法を考え出すといくつかの大成功を持っていたではなく見えました。

私はApacheサーバにphpをインストールしていますが、もしphpinfo()を見ると、SCRIPT_URIはそこにあり、分かりやすい値を持っています。

ヘッダーに書き込むことができません。ここで私がやったの簡易版だ:

#load modules 
LoadModule rewrite_module modules/mod_rewrite.so 
LoadModule headers_module modules/mod_headers.so 
#Get the original uri used 
RewriteRule .* - [E=INFO_SCRIPT_URI:%{SCRIPT_URI},NE] 
RequestHeader set x-orig-uri "%{INFO_SCRIPT_URI}e" 

私はすべてのアイデアは

いくつかの他のオプションを試してみましたが、Windows上の両方、CygwinとUbuntu Linuxのきましたか?

答えて

2

自分で解決策を見つけましたが、私が望むクリーンで簡単な解決策ではありません。 私はindvidual部品を得ることができたし、完全なURIを構築するためにそれらを使用することができます。

<IfModule !rewrite_module> 
    LoadModule rewrite_module modules/mod_rewrite.so 
</IfModule> 

<IfModule !headers_module> 
    LoadModule headers_module modules/mod_headers.so 
</IfModule> 


<IfModule rewrite_module> 
<IfModule headers_module> 

####### INITIAL SETUP ######################### 
    RewriteEngine on 

####### SET HEADERS ######################### 
    #get and set the host name 
     RewriteRule .* - [E=INFO_HTTP_HOST:%{HTTP_HOST},NE] 
     RequestHeader set x-orig-host "%{INFO_HTTP_HOST}e" 


    #get and set the host port 
     RewriteRule .* - [E=INFO_SERVER_PORT:%{SERVER_PORT},NE] 
     RequestHeader set x-orig-port "%{INFO_SERVER_PORT}e" 


    #If the uri starts with a slash and some alphanumerics, then make a 
    #group of that until the first non-alpha (ie. the next slash) 
     RewriteCond %{REQUEST_URI} ^(/[\w-]+) 
    #Save the content of the regex match group (%1) in an environment variable 
     RewriteRule .* - [E=INFO_REQUEST_CONTEXT:%1,NE] 
    #Set a header with the content of the environment variable 
     RequestHeader set x-orig-context "%{INFO_REQUEST_CONTEXT}e" 


    #If the accept-header contains a number after ;version= then make a regex group of that number 
     RewriteCond %{HTTP_ACCEPT} \+json;version=(\d+)$ 
    #Save the content of the regex match group (%1) in an environment variable 
     RewriteRule .* - [E=INFO_ACCEPT_VERSION:%1,NE] 
    #Set a header with the content of the environment variable 
     RequestHeader set x-orig-accept-version "%{INFO_ACCEPT_VERSION}e" 


    #If the accept-header contains kasia2. followed by some letters, 
    #then make a regex group of those letters 
     RewriteCond %{HTTP_ACCEPT} kasia2.(\w+).* 
    #Save the content of the regex match group (%1) in an environment variable 
     RewriteRule .* - [E=INFO_ACCEPT_NAME:%1,NE] 
    #Set a header with the content of the environment variable 
     RequestHeader set x-orig-accept-name "%{INFO_ACCEPT_NAME}e" 


    #If https is on ... 
     RewriteCond %{HTTPS} on 
    #...then set the protocol environment variable to "https" 
     RewriteRule .* - [E=INFO_PROTOCOL:https,NE] 
    #If https is off ... 
     RewriteCond %{HTTPS} off 
    #...then we assume it must be "http" 
     RewriteRule .* - [E=INFO_PROTOCOL:http,NE] 
    #Finally, set the protocol header 
     RequestHeader set x-orig-protocol "%{INFO_PROTOCOL}e" 


    #Get the request uri and set an environment variable 
     RewriteRule .* - [E=INFO_REQUEST_URI:%{REQUEST_URI},NE] 
    #Build the whole original url out of the available parts. SCRIPT_URI is always null, otherwise we could have used that. 
     RequestHeader set x-orig-url "%{INFO_PROTOCOL}e://%{INFO_HTTP_HOST}e%{INFO_REQUEST_URI}e" 
    #In addition make an url with only the host and context, for convenience 
     RequestHeader set x-orig-url-base "%{INFO_PROTOCOL}e://%{INFO_HTTP_HOST}e%{INFO_REQUEST_CONTEXT}e" 

</IfModule> 
</IfModule> 
+0

私は答えとしてマークしています。 –

0

https://serverfault.com/questions/23470/setting-apache-environment-variable-on-mod-rewrite-rewrite-conditionによると、あなたはここでdifferent configuration sections

を使用して実行順序を微調整する必要がある私はダミーを追加しました<Location>セクション

RewriteRule^- [E=FOO:set_by_rewrite_rule] 
RequestHeader set x-foo-outside-location %{FOO}e 

<Location "/bla"> 
    RequestHeader set x-foo-in-location %{FOO}e 
</Location> 

、これらは私が

を得ているのヘッダーですまた、私は <Location "/">を使用して(と私はすべての要求パスの有効な解決策を見つけることができないんだということ)場合、私はnullに両方のヘッダを取得

なおSebastian's answer is getting任意のダミーなしのヘッダー内のenv変数設定セクション... Go figure!

関連する問題