Mod-Rewrite
如何從現有 SSL 環境變數創建自定義標頭?
好吧,我花了一整天的時間——
我正在使用帶有 mod_ssl 的 apache 我正在嘗試採用現有的環境標頭“%{SSL_CLIENT_S_DN_CN}s”,它看起來像“Lastname Firstname Mi username”並設置一個名為 USERNAME 的新標頭並將其設置為僅使用者名(最後一個空格和字元串結尾之間的字元)
然後,我將該標頭反向代理到後端主機,該主機將使用它來辨識使用者。
我嘗試了很多不同的東西。我不知道問題是我不理解 perl 正則表達式,還是我不理解語法,或者我沒有把它放在正確的位置,或者三者兼而有之。
這是我嘗試過的一件事的範例:
SetEnvIf SSL_CLIENT_S_DN_CN (.*\ )(.*) newhostname=$2 RequestHeader set HOSTNAME "%{newhostname}e"
我真正想要的是一個新的標頭主機名,以等於 DN_CN 環境變數中最後一個非空白字元。
好的——我在周中想通了,但仍然想給某人一個賺取賞金的機會。
令人驚訝的是,這在任何地方都沒有很好的文件記錄,但是當我使用 mod_headers 執行此操作時,您可以在此處找到該文件。
無論您是從 ssl 還是環境中獲取它, 您都想**設置標題。**然後,您可以使用正則表達式和擷取組編輯標題。
一些例子:
RequestHeader 設置 REMOTE_USER "%{SSL_CLIENT_S_DN_CN}s" RequestHeader 編輯 REMOTE_USER (.*\s)(.*) $2 RequestHeader 設置 AUTHENTICATE_CN "%{SSL_CLIENT_S_DN_CN}s" RequestHeader 編輯 AUTHENTICATE_CN (.*\s)(.*) $1 RequestHeader 設置 AUTHENTICATE_MAIL "%{SSL_CLIENT_S_DN_CN}s" RequestHeader 編輯 AUTHENTICATE_MAIL (.*\s)(.*) $2@gmail.com