1ServerName dummy 2PidFile httpd.pid 3DocumentRoot www 4LogFormat "%h %l %u %t \"%r\" %>s %b" common 5CustomLog access.log common 6ErrorLog error.log 7<IfModule !mod_log_config.c> 8 LoadModule log_config_module modules/mod_log_config.so 9</IfModule> 10<IfModule !mod_alias.c> 11 LoadModule alias_module modules/mod_alias.so 12</IfModule> 13<IfModule !mod_cgi.c> 14 LoadModule cgi_module modules/mod_cgi.so 15</IfModule> 16<IfModule !mod_env.c> 17 LoadModule env_module modules/mod_env.so 18</IfModule> 19<IfModule !mod_rewrite.c> 20 LoadModule rewrite_module modules/mod_rewrite.so 21</IFModule> 22<IfModule !mod_version.c> 23 LoadModule version_module modules/mod_version.so 24</IfModule> 25<IfModule !mod_headers.c> 26 LoadModule headers_module modules/mod_headers.so 27</IfModule> 28<IfModule !mod_setenvif.c> 29 LoadModule setenvif_module modules/mod_setenvif.so 30</IfModule> 31 32<IfVersion < 2.4> 33LockFile accept.lock 34</IfVersion> 35 36<IfVersion < 2.1> 37<IfModule !mod_auth.c> 38 LoadModule auth_module modules/mod_auth.so 39</IfModule> 40</IfVersion> 41 42<IfVersion >= 2.1> 43<IfModule !mod_auth_basic.c> 44 LoadModule auth_basic_module modules/mod_auth_basic.so 45</IfModule> 46<IfModule !mod_authn_file.c> 47 LoadModule authn_file_module modules/mod_authn_file.so 48</IfModule> 49<IfModule !mod_authz_user.c> 50 LoadModule authz_user_module modules/mod_authz_user.so 51</IfModule> 52<IfModule !mod_authz_host.c> 53 LoadModule authz_host_module modules/mod_authz_host.so 54</IfModule> 55</IfVersion> 56 57<IfVersion >= 2.4> 58<IfModule !mod_authn_core.c> 59 LoadModule authn_core_module modules/mod_authn_core.so 60</IfModule> 61<IfModule !mod_authz_core.c> 62 LoadModule authz_core_module modules/mod_authz_core.so 63</IfModule> 64<IfModule !mod_access_compat.c> 65 LoadModule access_compat_module modules/mod_access_compat.so 66</IfModule> 67<IfModule !mod_mpm_prefork.c> 68 LoadModule mpm_prefork_module modules/mod_mpm_prefork.so 69</IfModule> 70<IfModule !mod_unixd.c> 71 LoadModule unixd_module modules/mod_unixd.so 72</IfModule> 73</IfVersion> 74 75PassEnv GIT_VALGRIND 76PassEnv GIT_VALGRIND_OPTIONS 77PassEnv GNUPGHOME 78PassEnv ASAN_OPTIONS 79PassEnv LSAN_OPTIONS 80PassEnv GIT_TRACE 81PassEnv GIT_CONFIG_NOSYSTEM 82PassEnv GIT_TEST_SIDEBAND_ALL 83 84Alias /dumb/ www/ 85Alias /auth/dumb/ www/auth/dumb/ 86 87<LocationMatch /smart/> 88 SetEnv GIT_EXEC_PATH ${GIT_EXEC_PATH} 89 SetEnv GIT_HTTP_EXPORT_ALL 90</LocationMatch> 91<LocationMatch /smart_noexport/> 92 SetEnv GIT_EXEC_PATH ${GIT_EXEC_PATH} 93</LocationMatch> 94<LocationMatch /smart_custom_env/> 95 SetEnv GIT_EXEC_PATH ${GIT_EXEC_PATH} 96 SetEnv GIT_HTTP_EXPORT_ALL 97 SetEnv GIT_COMMITTER_NAME "Custom User" 98 SetEnv GIT_COMMITTER_EMAIL custom@example.com 99</LocationMatch> 100<LocationMatch /smart_namespace/> 101 SetEnv GIT_EXEC_PATH ${GIT_EXEC_PATH} 102 SetEnv GIT_HTTP_EXPORT_ALL 103 SetEnv GIT_NAMESPACE ns 104</LocationMatch> 105<LocationMatch /smart_cookies/> 106 SetEnv GIT_EXEC_PATH ${GIT_EXEC_PATH} 107 SetEnv GIT_HTTP_EXPORT_ALL 108 Header set Set-Cookie name=value 109</LocationMatch> 110<LocationMatch /smart_headers/> 111 SetEnv GIT_EXEC_PATH ${GIT_EXEC_PATH} 112 SetEnv GIT_HTTP_EXPORT_ALL 113</LocationMatch> 114<LocationMatch /one_time_perl/> 115 SetEnv GIT_EXEC_PATH ${GIT_EXEC_PATH} 116 SetEnv GIT_HTTP_EXPORT_ALL 117</LocationMatch> 118<LocationMatch /smart_v0/> 119 SetEnv GIT_EXEC_PATH ${GIT_EXEC_PATH} 120 SetEnv GIT_HTTP_EXPORT_ALL 121 SetEnv GIT_PROTOCOL 122</LocationMatch> 123ScriptAlias /smart/incomplete_length/git-upload-pack incomplete-length-upload-pack-v2-http.sh/ 124ScriptAlias /smart/incomplete_body/git-upload-pack incomplete-body-upload-pack-v2-http.sh/ 125ScriptAlias /smart/no_report/git-receive-pack error-no-report.sh/ 126ScriptAliasMatch /error_git_upload_pack/(.*)/git-upload-pack error.sh/ 127ScriptAliasMatch /smart_*[^/]*/(.*) ${GIT_EXEC_PATH}/git-http-backend/$1 128ScriptAlias /broken_smart/ broken-smart-http.sh/ 129ScriptAlias /error_smart/ error-smart-http.sh/ 130ScriptAlias /error/ error.sh/ 131ScriptAliasMatch /one_time_perl/(.*) apply-one-time-perl.sh/$1 132<Directory ${GIT_EXEC_PATH}> 133 Options FollowSymlinks 134</Directory> 135<Files incomplete-length-upload-pack-v2-http.sh> 136 Options ExecCGI 137</Files> 138<Files incomplete-body-upload-pack-v2-http.sh> 139 Options ExecCGI 140</Files> 141<Files error-no-report.sh> 142 Options ExecCGI 143</Files> 144<Files broken-smart-http.sh> 145 Options ExecCGI 146</Files> 147<Files error-smart-http.sh> 148 Options ExecCGI 149</Files> 150<Files error.sh> 151 Options ExecCGI 152</Files> 153<Files apply-one-time-perl.sh> 154 Options ExecCGI 155</Files> 156<Files ${GIT_EXEC_PATH}/git-http-backend> 157 Options ExecCGI 158</Files> 159 160RewriteEngine on 161RewriteRule ^/dumb-redir/(.*)$ /dumb/$1 [R=301] 162RewriteRule ^/smart-redir-perm/(.*)$ /smart/$1 [R=301] 163RewriteRule ^/smart-redir-temp/(.*)$ /smart/$1 [R=302] 164RewriteRule ^/smart-redir-auth/(.*)$ /auth/smart/$1 [R=301] 165RewriteRule ^/smart-redir-limited/(.*)/info/refs$ /smart/$1/info/refs [R=301] 166RewriteRule ^/ftp-redir/(.*)$ ftp://localhost:1000/$1 [R=302] 167 168RewriteRule ^/loop-redir/x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-(.*) /$1 [R=302] 169RewriteRule ^/loop-redir/(.*)$ /loop-redir/x-$1 [R=302] 170 171# redir-to/502/x?y -> really-redir-to?path=502/x&qs=y which returns 502 172# redir-to/x?y -> really-redir-to?path=x&qs=y -> x?y 173RewriteCond %{QUERY_STRING} ^(.*)$ 174RewriteRule ^/redir-to/(.*)$ /really-redir-to?path=$1&qs=%1 [R=302] 175RewriteCond %{QUERY_STRING} ^path=502/(.*)&qs=(.*)$ 176RewriteRule ^/really-redir-to$ - [R=502,L] 177RewriteCond %{QUERY_STRING} ^path=(.*)&qs=(.*)$ 178RewriteRule ^/really-redir-to$ /%1?%2 [R=302] 179 180# The first rule issues a client-side redirect to something 181# that _doesn't_ look like a git repo. The second rule is a 182# server-side rewrite, so that it turns out the odd-looking 183# thing _is_ a git repo. The "[PT]" tells Apache to match 184# the usual ScriptAlias rules for /smart. 185RewriteRule ^/insane-redir/(.*)$ /intern-redir/$1/foo [R=301] 186RewriteRule ^/intern-redir/(.*)/foo$ /smart/$1 [PT] 187 188# Serve info/refs internally without redirecting, but 189# issue a redirect for any object requests. 190RewriteRule ^/redir-objects/(.*/info/refs)$ /dumb/$1 [PT] 191RewriteRule ^/redir-objects/(.*/objects/.*)$ /dumb/$1 [R=301] 192 193# Apache 2.2 does not understand <RequireAll>, so we use RewriteCond. 194# And as RewriteCond does not allow testing for non-matches, we match 195# the desired case first (one has abra, two has cadabra), and let it 196# pass by marking the RewriteRule as [L], "last rule, do not process 197# any other matching RewriteRules after this"), and then have another 198# RewriteRule that matches all other cases and lets them fail via '[F]', 199# "fail the request". 200RewriteCond %{HTTP:x-magic-one} =abra 201RewriteCond %{HTTP:x-magic-two} =cadabra 202RewriteRule ^/smart_headers/.* - [L] 203RewriteRule ^/smart_headers/.* - [F] 204 205<IfDefine SSL> 206LoadModule ssl_module modules/mod_ssl.so 207 208SSLCertificateFile httpd.pem 209SSLCertificateKeyFile httpd.pem 210SSLRandomSeed startup file:/dev/urandom 512 211SSLRandomSeed connect file:/dev/urandom 512 212SSLSessionCache none 213SSLMutex file:ssl_mutex 214SSLEngine On 215</IfDefine> 216 217<Location /auth/> 218 AuthType Basic 219 AuthName "git-auth" 220 AuthUserFile passwd 221 Require valid-user 222</Location> 223 224<LocationMatch "^/auth-push/.*/git-receive-pack$"> 225 AuthType Basic 226 AuthName "git-auth" 227 AuthUserFile passwd 228 Require valid-user 229</LocationMatch> 230 231<LocationMatch "^/auth-fetch/.*/git-upload-pack$"> 232 AuthType Basic 233 AuthName "git-auth" 234 AuthUserFile passwd 235 Require valid-user 236</LocationMatch> 237 238RewriteCond %{QUERY_STRING} service=git-receive-pack [OR] 239RewriteCond %{REQUEST_URI} /git-receive-pack$ 240RewriteRule ^/half-auth-complete/ - [E=AUTHREQUIRED:yes] 241 242<Location /half-auth-complete/> 243 Order Deny,Allow 244 Deny from env=AUTHREQUIRED 245 246 AuthType Basic 247 AuthName "Git Access" 248 AuthUserFile passwd 249 Require valid-user 250 Satisfy Any 251</Location> 252 253<IfDefine DAV> 254 LoadModule dav_module modules/mod_dav.so 255 LoadModule dav_fs_module modules/mod_dav_fs.so 256 257 DAVLockDB DAVLock 258 <Location /dumb/> 259 Dav on 260 </Location> 261 <Location /auth/dumb> 262 Dav on 263 </Location> 264</IfDefine> 265 266<IfDefine SVN> 267 LoadModule dav_svn_module modules/mod_dav_svn.so 268 269 <Location /${LIB_HTTPD_SVN}> 270 DAV svn 271 SVNPath "${LIB_HTTPD_SVNPATH}" 272 </Location> 273</IfDefine> 274